আপনার PWA তে প্লে বিলিং বাস্তবায়ন করুন

যদি আপনার PWA গুগল প্লেতে তালিকাভুক্ত থাকে এবং আপনি অ্যাপ-মধ্যস্থ পণ্য বা সাবস্ক্রিপশন বিক্রি করে এটি নগদীকরণ করতে চান, তাহলে প্লে নীতিমালা অনুসারে আপনাকে প্লে বিলিং বাস্তবায়ন করতে হবে। আপনার PWA তে দুটি API প্রয়োগ করতে হবে: ডিজিটাল গুডস API এবং পেমেন্ট রিকোয়েস্ট API

ডিজিটাল পণ্য API

ডিজিটাল গুডস এপিআই হল আপনার অ্যাপ এবং গুগল প্লে-এর মধ্যে একটি ইন্টারফেস। এটি আপনাকে প্লে কনসোলে আপনার অ্যাপ-মধ্যস্থ পণ্য এবং সাবস্ক্রিপশনের জন্য প্রবেশ করানো ডিজিটাল পণ্য এবং বিশদ পুনরুদ্ধার করতে দেয় এবং সেই সাথে ব্যবহারকারীর করা বিদ্যমান কেনাকাটাগুলিও পুনরুদ্ধার করতে দেয়। আপনি যদি এখনও প্লে কনসোলে অ্যাপ-মধ্যস্থ পণ্য বা সাবস্ক্রিপশন যোগ না করে থাকেন, তাহলে প্লে বিলিং-এর জন্য প্লে কনসোল সেটআপ অনুসরণ করতে ভুলবেন না।

৩০শে নভেম্বর, ২০২১ তারিখে, ChromeOS 96 ডিজিটাল গুডস API 2.0 বাস্তবায়নের সাথে প্রকাশিত হয়েছিল।

ডিজিটাল গুডস এপিআই-এর প্রথম সংস্করণের অরিজিন ট্রায়াল ৩০ জানুয়ারী, ২০২২ তারিখে শেষ হয়েছে। অতএব, এটি এখন অবচিত এবং এপিআই-এর শুধুমাত্র v2 উপলব্ধ।

২৩শে জুন, ২০২২ তারিখে, ChromeOS 103 ডিজিটাল গুডস API 2.1 বাস্তবায়নের সাথে প্রকাশিত হয়েছিল। এই রিলিজে কোনও ব্রেকিং পরিবর্তন নেই এবং শুধুমাত্র নতুন পদ্ধতি এবং অতিরিক্ত ক্ষেত্রগুলি অন্তর্ভুক্ত রয়েছে: listPurchaseHistory() এবং itemType

অরিজিন ট্রায়ালের জন্য নিবন্ধন করুন

দ্রষ্টব্য: ডিজিটাল গুডস এপিআই বর্তমানে একটি অরিজিন ট্রায়ালের মাধ্যমে উপলব্ধ - একটি প্রক্রিয়া যা ডেভেলপারদের নতুন ওয়েব এপিআইগুলিতে প্রাথমিক অ্যাক্সেসের অনুমতি দেয়। আপনাকে ডিজিটাল গুডস এপিআই v2 অরিজিন ট্রায়ালের জন্য নিবন্ধন করতে হবে এবং একটি টোকেনের অনুরোধ করতে হবে, যা আপনাকে আপনার অরিজিনের যেকোনো পৃষ্ঠায় প্রদান করতে হবে।

অরিজিন ট্রায়ালের জন্য নিবন্ধন করার পর, আপনি একটি "Valid Until" তারিখ দেখতে পাবেন, যে তারিখে আপনার টোকেনটি কাজ করবে বলে নিশ্চিত করা হয়। ট্রায়ালে অংশগ্রহণ চালিয়ে যাওয়ার জন্য সেই তারিখটি কাছে আসলে আপনার টোকেনগুলি পুনর্নবীকরণ করতে ভুলবেন না। অরিজিন ট্রায়াল হিসেবে অফার করা APIগুলি পরিবর্তন সাপেক্ষে, তাই আপনি যে কোনও অরিজিন ট্রায়ালে অংশগ্রহণ করছেন তার সর্বশেষ পরিবর্তনগুলি সম্পর্কে আপডেট থাকতে ভুলবেন না। কোনও সমস্যার ক্ষেত্রে, ডিজিটাল গুডস API ডকুমেন্টেশন দেখুন।

পেমেন্ট অনুরোধ API

পেমেন্ট রিকোয়েস্ট এপিআই যখন কোনও কেনাকাটা করা হয় তখন প্রকৃত পেমেন্ট লেনদেন পরিচালনা করে। এটি ডিজিটাল গুডস এপিআই দ্বারা প্রদত্ত আইটেমের বিবরণ ব্যবহার করে উপযুক্ত পেমেন্ট পদ্ধতি ব্যবহার করে অ্যাপ-মধ্যস্থ কেনাকাটা করে, যা আমাদের ক্ষেত্রে গুগল প্লে বিলিং।

ডিজিটাল গুডস এপিআই সনাক্ত করার বৈশিষ্ট্য

আপনি window অবজেক্টে getDigitalGoodsService পদ্ধতিটি পরীক্ষা করে অরিজিন ট্রায়ালের মাধ্যমে আপনার ওয়েবসাইটে API সঠিকভাবে সক্ষম করেছেন কিনা তা সনাক্ত করতে পারেন।

if ('getDigitalGoodsService' in window) {
  // Digital Goods API is supported!
} else {
  console.log('DigitalGoodsService is not available.');
  // Use another payment method
}

গুগল প্লে বিলিং পরিষেবার সাথে সংযোগ করুন

ডিজিটাল গুডস এপিআই বিভিন্ন ব্রাউজার এবং ডিজিটাল স্টোরের সাথে সামঞ্জস্যপূর্ণভাবে ডিজাইন করা হয়েছে, ঠিক যেমন পেমেন্ট রিকোয়েস্ট এপিআই ব্রাউজার-অ্যাগনস্টিক এবং বিভিন্ন পেমেন্ট প্রদানকারীর সাথে ব্যবহার করা যেতে পারে। গুগল প্লে বিলিং এর সাথে সম্পর্কিত পরিষেবার একটি উদাহরণ পেতে, "https://play.google.com/billing" স্ট্রিংটি পেমেন্ট পদ্ধতি হিসাবে getDigitalGoodsService() এ পাস করুন।

যদি পদ্ধতিটি ত্রুটির কারণ হয়, তাহলে Google Play Billing পেমেন্ট পদ্ধতি উপলব্ধ থাকবে না (যেমন ব্যবহারকারী ব্রাউজারের মাধ্যমে আপনার PWA অ্যাক্সেস করছেন)। পরিবর্তে, লেনদেনের জন্য আপনার অন্য একটি পেমেন্ট পদ্ধতি অফার করা উচিত।

if ('getDigitalGoodsService' in window) {
  // Digital Goods API is supported!
  try {
    const service = await window.getDigitalGoodsService('https://play.google.com/billing');
    // Google Play Billing service is available
  } catch (error) {
    // Google Play Billing service is not available. Use another payment flow.
  }
}

আইটেমের বিবরণ পান

একবার আপনার ডিজিটাল পণ্য পরিষেবাটি Google Play-তে সংযুক্ত হয়ে গেলে, আপনি পণ্য এবং কেনাকাটা সম্পর্কে তথ্য পুনরুদ্ধার করতে API ব্যবহার করতে পারেন।

getDetails() পদ্ধতি আপনাকে Play Console-এ সেট আপ করা আইটেম সম্পর্কে তথ্য পেতে দেয়। পণ্যের শিরোনাম, বিবরণ এবং দামের মতো তথ্য আপনার অ্যাপ UI-তে ব্যবহারকারীর কাছে প্রদর্শিত হওয়া উচিত যাতে তারা জানতে পারে কোনটি কেনার জন্য উপলব্ধ এবং কত দামে।

getDetails() পদ্ধতিতে আইটেম আইডির একটি তালিকা প্রয়োজন হবে যা আপনার Play Console-এ তৈরি করা অ্যাপ-মধ্যস্থ পণ্য এবং সাবস্ক্রিপশনের পণ্য আইডির সাথে সঙ্গতিপূর্ণ।

const itemDetails = await service.getDetails(['product_1', 'product_2', 'product_3']);
for (const item of itemDetails) {
  // Display item information to user
  displayItem(item.title, item.description, item.price);
}

ব্যবহারকারীর লোকেলের জন্য উপযুক্ত মূল্য পেতে, আপনাকে কিছু অতিরিক্ত বিন্যাস করতে হবে:

const localePrice = new Intl.NumberFormat(navigator.language, {
  style: 'currency',
  currency: item.price.currency,
}).format(item.price.value);

দ্রষ্টব্য: ডিজিটাল গুডস এপিআই আপনাকে আইটেম আইডির তালিকা পাওয়ার কোনও পদ্ধতি প্রদান করে না। পরিবর্তে, আপনাকে হয় আপনার ক্লায়েন্টে সেগুলি হার্ড-কোড করতে হবে অথবা আপনার ব্যাক-এন্ড সার্ভার থেকে আনতে হবে। গুগল প্লে ডেভেলপার এপিআই আপনাকে ব্যাক-এন্ড থেকে আইটেম আইডির তালিকা অনুসন্ধান করতে দেয়। ( আপনার ব্যাক-এন্ড সার্ভারে কী প্লে বিলিং উপাদানগুলি বাস্তবায়ন সম্পর্কে আরও দেখুন। আপনি যে সমাধানই বেছে নিন না কেন, আইটেম আইডিগুলি প্লে কনসোলে থাকা জিনিসের সাথে সামঞ্জস্যপূর্ণ রাখতে ভুলবেন না।

API এর v2.1 এ, getDetails() দ্বারা ফেরত দেওয়া একটি ক্ষেত্র হল itemType । এটি এমন একটি enum যেখানে মান হল ”product” অথবা ”subscription” যা নির্দেশ করে যে সংশ্লিষ্ট আইটেমটি যথাক্রমে একটি ইন-অ্যাপ পণ্য নাকি সাবস্ক্রিপশন। প্রতিটি পণ্যের ধরণের জন্য ভিন্ন ভিন্ন পদ্ধতি প্রয়োগ করার প্রয়োজন হলে দুই ধরণের পণ্যের মধ্যে পার্থক্য করতে সক্ষম হওয়া কার্যকর হতে পারে। উদাহরণস্বরূপ, ব্যবহারকারীদের সাবস্ক্রাইব করার জন্য আপনার একটি নির্দিষ্ট পৃষ্ঠা এবং অন্যান্য নন-সাবস্ক্রিপশন পণ্যের জন্য আরেকটি পৃষ্ঠা থাকতে পারে। আপনার ব্যাকএন্ডে ( purchases.products অথবা purchases.subscriptions ) ব্যবহার করার জন্য উপযুক্ত Google Play Developer API REST রিসোর্স জানার জন্যও এটি কার্যকর।

একটি জিনিস কিনুন

একবার আপনার পণ্য এবং বিশদ ব্যবহারকারীর কাছে প্রদর্শিত হয়ে গেলে, আপনি পেমেন্ট রিকোয়েস্ট API ব্যবহার করে ক্রয় প্রবাহ তৈরি করতে পারেন। ডিজিটাল গুডস API এর সাথে ব্যবহার করার সময়, শুধুমাত্র একটি ইনপুট প্যারামিটার প্রয়োজন: methodData

প্লে বিলিং একবারে শুধুমাত্র একটি আইটেম কেনার অনুমতি দেয়; আইটেমের দাম এবং বিশদ বিবরণ প্লে সার্ভার ইতিমধ্যেই জানে, তাই details প্যারামিটারের প্রয়োজন নেই। আরও বিস্তারিত ব্যাখ্যার জন্য ব্যাখ্যাকারী দেখুন।

"https://play.google.com/billing" স্ট্রিং ব্যবহার করে পেমেন্ট পদ্ধতি হিসেবে Google Play Billing কে শনাক্ত করতে PaymentRequestmethodData প্যারামিটারের supportedMethods সদস্য ব্যবহার করুন। তারপর data সদস্যে, sku হিসেবে আইটেম আইডিটি পাস করুন।

const paymentMethodData = [
  {
    supportedMethods: 'https://play.google.com/billing',
    data: {
      sku: item.itemId,
    },
  },
];

তারপর পেমেন্ট রিকোয়েস্ট তৈরি করুন এবং পেমেন্ট ফ্লো শুরু করতে show() এ কল করুন:

const request = new PaymentRequest(paymentMethodData);
const paymentResponse = await request.show();

এটি ব্যবহারকারীকে Play purchase UI প্রদর্শন করবে, যেখানে তারা যে পণ্যটি কিনতে চাইছেন তার বিস্তারিত তথ্য দেখতে পাবে। তারা লেনদেনটি বাতিল করতে পারে অথবা অর্থপ্রদানের সাথে এগিয়ে যেতে পারে। ব্যবহারকারী যদি অর্থপ্রদান বাতিল করে, তাহলে show() দ্বারা প্রদত্ত প্রতিশ্রুতি একটি ত্রুটি সহ প্রত্যাখ্যান করা হবে। যদি তারা সফলভাবে অর্থপ্রদান করে এবং ক্রয় সম্পন্ন করে, তাহলে প্রতিশ্রুতিটি PaymentResponse এর মাধ্যমে সমাধান হবে। অর্থপ্রদানের প্রতিক্রিয়ার details সম্পত্তিতে, একটি ক্রয় টোকেন ফেরত দেওয়া হবে।

জালিয়াতি প্রতিরোধ করার জন্য, আপনার ব্যাক-এন্ড সার্ভারে ক্রয় এবং ক্রয় টোকেন যাচাই করা অত্যন্ত গুরুত্বপূর্ণ। ব্যবহারকারী এবং তাদের সাথে সম্পর্কিত ক্রয় টোকেনগুলির উপর নজর রাখাও একটি ভাল ধারণা। আপনার ব্যাক-এন্ড সার্ভারে যাচাইকরণ কীভাবে বাস্তবায়ন করবেন তা শিখুন।

ক্রয় যাচাই করার পর, পেমেন্ট ফ্লো শেষ করতে এবং বিলিং UI বন্ধ করতে পেমেন্ট প্রতিক্রিয়ায় complete() কল করুন। পেমেন্ট প্রক্রিয়ার অবস্থা নির্দেশ করার জন্য আপনি একটি ঐচ্ছিক result স্ট্রিংও পাস করতে পারেন। ব্যবহারকারীকে এই ফলাফলের কোনও ইঙ্গিত প্রদান করা হবে কিনা তা ব্রাউজারের উপর নির্ভর করে। Chrome কোনও ব্যবহারকারী-দৃশ্যমান ইঙ্গিত তৈরি করে না তাই আপনার PWA-তে আপনার নিজস্ব ত্রুটি বা সাফল্যের বার্তা প্রদর্শন করার পরামর্শ দেওয়া হচ্ছে।

/* Changes were recently made so that the PaymentResponse `details` property returns the purchase token as `purchaseToken` instead of `token`. Note that `token` will be deprecated at some point in the future. To ensure that your app won't be affected by this, make the change to `purchaseToken` in your client code and use the latest version of Bubblewrap (v1.13.5 and later) to update and generate a new app package to upload to the Play Console. */
const { purchaseToken } = paymentResponse.details;

let paymentComplete;
if (validatePurchaseOnBackend(purchaseToken)) {
  paymentComplete = await paymentResponse.complete('success');
  // Let user know their purchase transaction has successfully completed and been verified
} else {
  paymentComplete = await paymentResponse.complete('fail');
  // Let user know their purchase transaction failed to verify
}

সাবস্ক্রিপশন আপগ্রেড এবং ডাউনগ্রেড

এই ক্রয় প্রবাহ অ্যাপ-মধ্যস্থ পণ্য এবং সাবস্ক্রিপশন ক্রয় উভয়ের জন্যই একই। তবে, সাবস্ক্রিপশনের জন্য, Google Play-তে অতিরিক্ত ক্রয় বিকল্প রয়েছে যা আপনি প্রয়োগ করতে পারেন: আপগ্রেড এবং ডাউনগ্রেড। পেমেন্ট পদ্ধতির জন্য data তৈরি করার সময়, আপগ্রেড বা ডাউনগ্রেড প্রবাহ শুরু করার জন্য আপনাকে নিম্নলিখিতগুলি পাস করতে হবে:

  • sku : এটি হল নতুন সাবস্ক্রিপশনের আইটেম আইডি যা আপগ্রেড বা ডাউনগ্রেড করা হবে।
  • oldSku : এটি ব্যবহারকারীর বর্তমান সাবস্ক্রিপশনের আইটেম আইডি।
  • purchaseToken : এটি ব্যবহারকারীর বর্তমান সাবস্ক্রিপশনের জন্য ক্রয় টোকেন। যেমনটি আগে উল্লেখ করা হয়েছে, আপনার ব্যাকএন্ডে ক্রয় টোকেনগুলির ট্র্যাক রাখা একটি ভাল ধারণা। এবং এই পরিস্থিতি এবং অন্যান্য পরিস্থিতির জন্য, আপনার একজন ব্যবহারকারীকে তাদের বর্তমান ক্রয় এবং ক্রয় টোকেনের সাথেও সংযুক্ত করা উচিত।
  • prorationMode : ব্যবহারকারীর বর্তমান সাবস্ক্রিপশন প্রতিস্থাপন করলে নতুন সাবস্ক্রিপশনের জন্য এভাবে চার্জ করা হবে।
প্রোরেশন মোড বিবরণ

তাৎক্ষণিকএবংচার্জপ্রোরেটেডমূল্য

সাবস্ক্রিপশনটি তাৎক্ষণিকভাবে আপগ্রেড করা হয় এবং বিলিং চক্র একই থাকে। বাকি সময়ের জন্য মূল্যের পার্থক্য ব্যবহারকারীর কাছ থেকে চার্জ করা হয়।

তাৎক্ষণিক এবং চার্জ পূর্ণ মূল্য

সাবস্ক্রিপশন আপগ্রেড বা ডাউনগ্রেড করা হয় এবং ব্যবহারকারীকে নতুন এনটাইটেলমেন্টের জন্য অবিলম্বে সম্পূর্ণ মূল্য চার্জ করা হয়। পূর্ববর্তী সাবস্ক্রিপশন থেকে অবশিষ্ট মূল্য নতুন সাবস্ক্রিপশনের জন্য সময়ের জন্য আনুপাতিক হারে প্রদান করা হয়। এই প্রোরেশন মোডটি সম্প্রতি Google Play বিলিং লাইব্রেরি 4.0 রিলিজে যোগ করা হয়েছে। এটি এখন Bubblewrap এর মাধ্যমে 1.13.5 সংস্করণ থেকে শুরু করে উপলব্ধ।

অনুসরণ

সাময়িকভাবে অক্ষম করা হয়েছে। এই প্রোরেশন মোডে একটি সম্ভাব্য জালিয়াতির পথ রয়েছে যেখানে ব্যবহারকারীরা একটি বিলিং চক্রের জন্য অতিরিক্ত অর্থ প্রদান ছাড়াই একটি আপগ্রেড করা সাবস্ক্রিপশন পেতে পারেন। দয়া করে মনে রাখবেন যে আমরা সমাধানের কাজ করার সময় এই মোডটি অস্থায়ীভাবে অক্ষম করে রেখেছি।

immediateWithTimeProration সম্পর্কে

সাবস্ক্রিপশনটি তাৎক্ষণিকভাবে আপগ্রেড বা ডাউনগ্রেড করা হয়। বাকি সময় মূল্যের পার্থক্যের উপর ভিত্তি করে সমন্বয় করা হয় এবং পরবর্তী বিলিংয়ের তারিখ এগিয়ে দিয়ে নতুন সাবস্ক্রিপশনে জমা করা হয়। এটি ডিফল্ট আচরণ।

বিলম্বিত

সাবস্ক্রিপশনটি আপগ্রেড বা ডাউনগ্রেড করা হয় শুধুমাত্র যখন সাবস্ক্রিপশন পুনর্নবীকরণ করা হয়। এটি বিশেষ করে ডাউনগ্রেডের জন্য কার্যকর।

অজানাসাবস্ক্রিপশনআপগ্রেডডাউনগ্রেডনীতি

কোনও নীতিমালা নেই। এটি সুপারিশ করা হয় না।

গুগল প্লে বিলিং লাইব্রেরি রেফারেন্স ডকুমেন্টেশনে বিভিন্ন প্রোরেশন মোড সম্পর্কে আরও জানুন। সাবস্ক্রিপশন আপগ্রেড এবং ডাউনগ্রেড এবং প্রোরেশন মোড সুপারিশ সম্পর্কে আরও জানতে অ্যান্ড্রয়েড ডেভেলপার ডক্স দেখুন।

এই অতিরিক্ত ক্ষেত্রগুলির ব্যবহার এইরকম দেখাবে:

const paymentMethod = [
  {
    supportedMethods: 'https://play.google.com/billing',
    data: {
      sku: item.itemId,
      oldSku: oldPurchase.itemId,
      purchaseToken: oldPurchase.purchaseToken,
      prorationMode: 'immediateAndChargeProratedPrice',
    },
  },
];

এখানে, item হল ব্যবহারকারী যে নতুন সাবস্ক্রিপশনে আপগ্রেড বা ডাউনগ্রেড করার চেষ্টা করছেন তার ItemDetails , এবং oldPurchase হল ব্যবহারকারীর বর্তমান সাবস্ক্রিপশনের PurchaseDetails

ক্রয় স্বীকার করুন

কোনও ব্যবহারকারী কোনও জিনিস কেনার পরে, আপনার তাদের যথাযথ অধিকার (তারা যে জিনিসটি বা সামগ্রী কিনেছেন তাতে অ্যাক্সেস) প্রদান করা উচিত। তারপর, ক্রয়টি স্বীকার করুন। ক্রয়টি স্বীকার করলে Google Play জানতে পারবে যে আপনি ক্রয়টি যথাযথভাবে পেয়েছেন এবং প্রক্রিয়া করেছেন।

দ্রষ্টব্য: যদি ক্রয়ের সময়সীমার ৭২ ঘন্টার মধ্যে কোনও ক্রয়ের স্বীকৃতি না দেওয়া হয়, তাহলে ব্যবহারকারীকে অর্থ ফেরত দেওয়া হবে এবং ক্রয়টি প্রত্যাহার করা হবে। ক্রয় টোকেনটি আর বৈধ থাকবে না, তাই যখন আপনি বিদ্যমান ক্রয়ের জন্য জিজ্ঞাসা করবেন তখন প্রত্যাহার করা ক্রয়টি ফেরত দেওয়া হবে না। এটি নিশ্চিত করে যে কোনও নেটওয়ার্ক ত্রুটির ক্ষেত্রে ব্যবহারকারীর কাছ থেকে অনুপযুক্তভাবে চার্জ করা হবে না যার ফলে তারা তাদের আইটেমের অধিকার পাবে না।

আপনার ব্যাকএন্ড সার্ভার থেকে Google Play ডেভেলপার API ব্যবহার করে কেনাকাটা স্বীকার করা উচিত। আমরা এনটাইটেলমেন্ট প্রদান করার এবং তারপর আপনার ব্যাকএন্ড সার্ভারে একসাথে কেনাকাটা স্বীকার করার পরামর্শ দিচ্ছি।

  1. একজন ব্যবহারকারী ক্লায়েন্ট-সাইড ক্রয় করার পরে, আপনার ব্যাকএন্ড সার্ভারে একটি অনুরোধে ক্রয় টোকেন এবং আইটেম আইডি পাঠান।
  2. আপনার ব্যাকএন্ডে, ক্রয়টি যাচাই করার জন্য বিশদ জানতে, কল করুন:
  3. আপনার ব্যাকএন্ড ডাটাবেসে উপযুক্ত এনটাইটেলমেন্ট প্রদান করুন।
  4. তারপর ফোন করে ক্রয়টি স্বীকার করুন:

একটি ক্রয় গ্রহণ করুন

যখন আপনি কোনও ক্রয় স্বীকার করেন, তখন এটি Google Play-কে জানায় যে ব্যবহারকারী এখন আইটেমটির মালিক এবং তাকে এটি আবার কিনতে দেওয়া উচিত নয়। যদি এটি এমন একটি আইটেম হয় যা ব্যবহারকারীকে কেবল একবার কিনতে হবে এবং চিরকালের জন্য তার মালিকানা থাকবে (যেমন একটি গেম ক্যারেক্টার স্কিন), তাহলে আইটেমটি ব্যবহারযোগ্য নয়।

অন্যথায়, আইটেমটি এমন কিছু হতে পারে যা আপনি একজন ব্যবহারকারীকে একবারে একটির মধ্যে সীমাবদ্ধ রাখেন। তারপর ব্যবহারকারীকে অন্য একটি কেনার আগে আইটেমটি ব্যবহার করতে হবে। যখন ব্যবহারকারী আইটেমটি "ব্যবহার" করে, তখন Google Play কে জানাতে যে ব্যবহারকারী আইটেমটি ব্যবহার করেছেন, আপনার consume() পদ্ধতিটি কল করা উচিত। তারপর Google Play ব্যবহারকারীকে আবার কেনার জন্য আইটেমটি উপলব্ধ করবে।

যেসব আইটেমের একাধিক মালিকানা আপনি একজন ব্যবহারকারীকে দিতে চান, সেগুলো বারবার কিনতে হবে, প্রথমে ব্যবহার না করেই (আমরা এগুলোকে পুনরাবৃত্তিযোগ্য আইটেম বলি)। একইভাবে, গুগল প্লে ব্যবহারকারীকে আবার কিনতে দেওয়ার আগে এই আইটেমগুলিকে "ব্যবহার" করতে হবে। অতএব, ব্যবহারকারী যদি এখনও আইটেমটি ব্যবহার না করে থাকেন, তবুও আপনাকে consume() পদ্ধতি ব্যবহার করে আইটেমটিকে consumed হিসেবে চিহ্নিত করতে হবে।

// After the user purchases the item, send the purchase token and item ID to your backend to grant the entitlement and acknowledge it right away

. . .
// When the user uses the item or if it is a repeatable item, consume it so it’s available for purchase again.
service.consume(purchaseToken);
}

বিদ্যমান কেনাকাটাগুলি পরীক্ষা করুন

ব্যবহারকারীদের জন্য সর্বশেষ গুরুত্বপূর্ণ কাজ হল বিদ্যমান কেনাকাটা (অ্যাপ-মধ্যস্থ পণ্য যা এখনও ব্যবহার করা হয়নি এবং চলমান সাবস্ক্রিপশন) পরীক্ষা করা যাতে ব্যবহারকারীরা জানতে পারেন যে তাদের বর্তমানে কোন সাবস্ক্রিপশন বা আইটেম রয়েছে। এই বিদ্যমান কেনাকাটাগুলি অ্যাপ-মধ্যস্থ বা প্লে স্টোরে করা যেকোনো ডিভাইসে পূর্ববর্তী Google Play কেনাকাটা থেকে হবে। প্লে স্টোরে অ্যাপের বাইরে থেকে করা কেনাকাটাকে অ্যাপ-মধ্যস্থ কেনাকাটা বলা হয়।

বিদ্যমান কেনাকাটা পুনরুদ্ধার করার সময়, আপনার স্বীকৃতির স্থিতিও পরীক্ষা করা উচিত এবং পূর্বে করা কিন্তু সঠিকভাবে স্বীকৃতি না পাওয়া যেকোনো কেনাকাটা স্বীকার করা উচিত। ব্যবহারকারীর অধিকারগুলি আপ-টু-ডেট এবং অ্যাপে সঠিকভাবে প্রতিফলিত করার জন্য যত তাড়াতাড়ি সম্ভব ক্রয়গুলি স্বীকৃতি দেওয়ার পরামর্শ দেওয়া হচ্ছে।

ডিজিটাল গুডস এপিআই listPurchases() পদ্ধতিটি প্রতিটি ক্রয়ের জন্য itemId এবং purchaseToken ধারণকারী PurchaseDetails এর একটি তালিকা প্রদান করবে। ক্রয়ের অবস্থা পরীক্ষা করতে এবং যথাযথভাবে স্বীকৃতি জানাতে আপনাকে আপনার ব্যাকএন্ড সার্ভারে Google Play ডেভেলপার API ব্যবহার করতে হবে। আপনার উচিত:

  1. ব্যবহারকারীর ক্রয়ের তালিকা পুনরুদ্ধার করতে ডিজিটাল গুডস API listPurchases() পদ্ধতির ক্লায়েন্ট-সাইডকে কল করুন।
  2. প্রতিটি ক্রয়ের জন্য, আপনার ব্যাকএন্ডে purchaseToken এবং itemId পাস করুন।
  3. উপযুক্ত হলে, আপনার ব্যাকএন্ড ডাটাবেসে এনটাইটেলমেন্ট প্রদান করুন।
  4. তারপর: কল করুন এবং acknowledgementState চেক করুন।
  5. যদি মান ০ হয় (এখনও স্বীকার করা হয়নি), তাহলে কল করুন:

এনটাইটেলমেন্ট দেওয়ার আগে আপনার ব্যাক-এন্ড সার্ভারে কেনাকাটা কীভাবে যাচাই করবেন সে সম্পর্কে আরও জানুন।

ক্রয়ের ইতিহাস

listPurchases ব্যবহারকারীর বিদ্যমান ক্রয় সম্পর্কে তথ্য প্রদান করবে, listPurchaseHistory() পদ্ধতি (API এর v2.1 এ) প্রতিটি আইটেমের জন্য ব্যবহারকারীর করা সাম্প্রতিক ক্রয়টি প্রদান করবে, ক্রয়টি মেয়াদোত্তীর্ণ, বাতিল, বা ব্যবহার করা হয়েছে কিনা তা নির্বিশেষে। listPurchaseHistory() পদ্ধতি প্রতিটি ক্রয়ের জন্য itemId এবং purchaseToken সম্বলিত PurchaseDetails এর একটি তালিকা প্রদান করে, যা আপনাকে আরও তথ্য পুনরুদ্ধার করতে আপনার ব্যাকএন্ড সার্ভারে Google Play Developer API এর সাথে ব্যবহার করতে হবে।

অ্যাপের বাইরের কেনাকাটা

অ্যাপ-এর বাইরের কেনাকাটা হল সেই কেনাকাটা যা সাধারণ অ্যাপ-এর মধ্যে কেনাকাটা প্রবাহে করা হয় না। এগুলি সাধারণত আপনার অ্যাপের পরিবর্তে প্লে স্টোরে ঘটবে। ব্যবহারকারীরা অ্যাপ-এর বাইরে কেনাকাটা দুটি প্রধান উপায়ে করতে পারেন:

  • প্রোমো কোড রিডিম করা : প্লে স্টোর ব্যবহারকারী মেনুতে, "অফার এবং বিজ্ঞপ্তি" -> "প্রোমো কোড রিডিম করুন" অথবা "পেমেন্ট এবং সাবস্ক্রিপশন" -> "গিফট কোড রিডিম করুন" এ।
  • পুনঃসাবস্ক্রাইব করা : প্লে স্টোর ব্যবহারকারী মেনুতে, "পেমেন্ট এবং সাবস্ক্রিপশন" -> "সাবস্ক্রিপশন" -এ। এখানে, ব্যবহারকারীরা বিভিন্ন অ্যাপ জুড়ে তাদের সমস্ত সাবস্ক্রিপশন পরিচালনা করতে পারবেন। মেয়াদোত্তীর্ণ বা বাতিল সাবস্ক্রিপশনের জন্য, ব্যবহারকারীদের "পুনঃসাবস্ক্রাইব" করার বিকল্প রয়েছে।

যখন ব্যবহারকারীরা প্লে স্টোর থেকে পুনরায় সাবস্ক্রাইব করেন, তখন তাদের কেনাকাটা স্বয়ংক্রিয়ভাবে স্বীকার করা হয় না যার ফলে তাদের টাকা ফেরত দেওয়া হতে পারে। এই আচরণটি ইচ্ছাকৃত কারণ ব্যবহারকারীরা কেবল তখনই তাদের সাবস্ক্রিপশনের জন্য চার্জ করা উচিত যখন তারা অ্যাপটি ব্যবহার করার জন্য খুলেন। ব্যবহারকারী "সাবস্ক্রিপশন নিশ্চিত করুন" এর মতো একটি বার্তা দেখতে পারেন, যা তাদের অ্যাপটি খোলার কথা মনে করিয়ে দেয়।

ব্যবহারকারীদের ক্রয়টি স্বীকার করার জন্য অ্যাপটি খুলে তাদের সাবস্ক্রিপশন নিশ্চিত করতে বলা হবে।

ব্যবহারকারী অ্যাপটি চালু করার পর এগুলোর স্বীকৃতি বাস্তবায়ন করা ডেভেলপার হিসেবে আপনার উপর নির্ভর করে। এজন্য আমরা সুপারিশ করি যে আপনি বিদ্যমান কেনাকাটাগুলি (সাধারণত অ্যাপটি প্রথম চালু হওয়ার সময়) পরীক্ষা করুন এবং যে কোনও কেনাকাটা এখনও স্বীকৃতি পায়নি তা স্বীকার করুন।

ব্যবহারকারীদের সাবস্ক্রিপশন পরিচালনা করতে দিন

ভালো ব্যবহারকারীর অভিজ্ঞতার জন্য, ব্যবহারকারীদের অ্যাপের মধ্যে তাদের সাবস্ক্রিপশন পরিচালনা এবং বাতিল করার জন্য একটি উপায় প্রদান করা গুরুত্বপূর্ণ। আমরা সেটিংস পৃষ্ঠা বা মেনুতে একটি ডিপ লিঙ্ক তৈরি করার পরামর্শ দিচ্ছি, যা ব্যবহারকারীকে আপনার অ্যাপের জন্য প্লে স্টোরের সাবস্ক্রিপশন পরিচালনা পৃষ্ঠায় পুনঃনির্দেশিত করবে। নিম্নলিখিত URL টি আপনার উপযুক্ত "সাব-প্রোডাক্ট-আইডি" এবং "অ্যাপ-প্যাকেজ-নাম" দিয়ে প্রতিস্থাপন করুন:

https://play.google.com/store/account/subscriptions?sku=sub-product-id&package=app-package-name

পরবর্তী পদক্ষেপ

এই ব্যবহারকারী প্রবাহ এবং কোড স্নিপেটগুলি হল আপনার PWA-তে Play Billing বাস্তবায়নের জন্য DIgital Goods API এবং Payment Request API কীভাবে ব্যবহার করবেন তা দেখানোর জন্য একটি মৌলিক বাস্তবায়ন। আপনার অ্যাপের প্রেক্ষাপট এবং ব্যবহারের ক্ষেত্রে API গুলি ব্যবহার করা উচিত কারণ এটি বোধগম্য। একটি এন্ড-টু-এন্ড বাস্তবায়নের উদাহরণের জন্য, আমাদের ওপেন-সোর্স নমুনাটি দেখুন।

তারপর, আপনার অ্যাপটিকে সুরক্ষিত রাখতে এবং আপনার ব্যবহারকারীর অধিকারের সাথে সর্বদা আপডেট রাখার জন্য আপনার ব্যাক-এন্ড সার্ভারে গুরুত্বপূর্ণ প্লে বিলিং উপাদানগুলি কীভাবে বাস্তবায়ন করবেন তা একবার দেখে নিন।