আপনার বিশ্বস্ত ওয়েব অ্যাক্টিভিটিতে Google Play Billing ব্যবহার করা

এই নির্দেশিকাটি বিশ্বস্ত ওয়েব অ্যাক্টিভিটি হিসেবে প্যাকেজ করা ওয়েব অ্যাপের জন্য। Kotlin বা Java-তে লেখা Android অ্যাপের জন্য, Google Play Billing ডকুমেন্টেশন দেখুন।

Google Play-তে যেসব অ্যাপ ডিজিটাল কন্টেন্ট বা সাবস্ক্রিপশন বিক্রি করে, সেগুলিকে Google Play Billing ব্যবহার করতে হবে। বিশ্বস্ত ওয়েব অ্যাক্টিভিটিতে, আপনি নিম্নলিখিত ওয়েব API ব্যবহার করে এটির সাথে ইন্টিগ্রেট করেন, যা Chrome 101 এবং Android ও ChromeOS-এর পরবর্তী ভার্সনে উপলভ্য:

  • Digital Goods API: প্রোডাক্টের বিবরণ ও ব্যবহারকারীর কেনাকাটা সংক্রান্ত তথ্য ফিরিয়ে আনে।
  • Payment Request API: পারচেজ ফ্লো শুরু করে।

প্রয়োজনীয়তা

Google Play Billing সেট-আপ করতে, আপনার এগুলি প্রয়োজন:

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

আপনার Android প্রোজেক্টে Play Billing চালু করুন

আপনি Bubblewrap দিয়ে অ্যাপ তৈরি করলে, আপনার প্রোজেক্টের রুটে twa-manifest.json-এ playBilling ফিচার চালু করুন:

"features": {
  "playBilling": {
    "enabled": true
  }
}

তারপর bubblewrap update-এর পরে bubblewrap build রান করুন এবং Play Store-এ নতুন Android প্যাকেজ আপলোড করুন।

আপনি Android Studio-তে অ্যাপ তৈরি করলে, Android Browser Helper Play Billing লাইব্রেরি যোগ করুন। প্রয়োজনীয় DelegationService ও AndroidManifest.xml পরিবর্তন করতে, twa-play-billing ডেমো দেখুন।

Google Play Billing-এর জন্য সহায়তা চেক করুন

Play Store আইডেন্টিফায়ার, https://play.google.com/billing সহ getDigitalGoodsService()-এ কল করুন। পদ্ধতিটি না থাকলে বা কল করা না গেলে, অন্য পেমেন্ট ফ্লো ব্যবহার করুন:

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

প্রোডাক্টের বিবরণ দেখুন

আপনার প্রোডাক্ট আইডির নাম, বিবরণ ও দাম জানতে getDetails() ব্যবহার করুন, যাতে আপনার দেখানো দাম Play Store-এর সাথে মিলে যায়:

const details = await service.getDetails(['shiny_sword', 'gem']);
for (const item of details) {
  const localizedPrice = new Intl.NumberFormat(
      navigator.language,
      {style: 'currency', currency: item.price.currency}
  ).format(item.price.value);

  renderProductDetails(
      item.itemId, item.title, localizedPrice, item.description);
}

Digital Goods API আপনার প্রোডাক্ট আইডি তালিকাভুক্ত করতে পারছে না। আপনার ব্যাকএন্ড থেকে সেগুলি কোয়েরি করতে, Google Play Developer API ব্যবহার করুন।

কেনাকাটা করা

data-এ পেমেন্ট পদ্ধতি হিসেবে https://play.google.com/billing এবং প্রোডাক্ট আইডি হিসেবে sku সহ PaymentRequest তৈরি করুন। Google Play Billing, Play Console থেকে দাম ব্যবহার করে, তাই total প্রয়োজন হলেও তা উপেক্ষা করা হয়েছে।

show() সমাধান করার পরে, আপনার ব্যাকএন্ডে কেনাকাটার টোকেন পাঠান যাতে কেনাকাটা যাচাই ও স্বীকার করা যায়। আপনি তিন দিনের মধ্যে কেনাকাটার স্বীকৃতি না দিলে, Google Play ব্যবহারকারীকে রিফান্ড করে এবং কেনাকাটা বাতিল করে দেয়।

async function makePurchase(service, sku) {
  const paymentMethods = [{
    supportedMethods: 'https://play.google.com/billing',
    data: {sku},
  }];
  // Required by the Payment Request API, but ignored by Google Play Billing.
  const paymentDetails = {
    total: {label: 'Total', amount: {currency: 'USD', value: '0'}},
  };

  const request = new PaymentRequest(paymentMethods, paymentDetails);
  try {
    const response = await request.show();
    const {purchaseToken} = response.details;

    if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
      // Optional: consume the purchase so the user can buy the item again.
      await service.consume(purchaseToken);
      await response.complete('success');
    } else {
      await response.complete('fail');
    }
  } catch (error) {
    // An AbortError usually means the user canceled the purchase.
  }
}

ব্যবহারকারীর কেনাকাটা চেক করা

ব্যবহারকারীর মালিকানাধীন আইটেম খুঁজতে listPurchases() ব্যবহার করুন, যেমন অ্যাক্টিভ সাবস্ক্রিপশন, ব্যবহার না করা কেনাকাটা বা রিডিম করা প্রোমো কোড। আপনার ব্যাকএন্ডে প্রতিটি কেনাকাটা যাচাই করুন এবং আপনি স্বীকার করেননি এমন যেকোনও কেনাকাটা স্বীকার করুন:

const purchases = await service.listPurchases();
for (const p of purchases) {
  await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);
  // Update the UI with items the user is entitled to.
}

আপনার ইন্টিগ্রেশন পরীক্ষা করুন

Play Store-এ প্রকাশ করার আগে Android ডিভাইসে পরীক্ষা করতে, এইসব ধাপ অনুসরণ করুন:

  1. ডেভেলপার বিকল্প চালু সহ Android 9 বা তার পরবর্তী যেকোনও ভার্সন ব্যবহার করুন।
  2. Chrome-এ, chrome://flags-এ যান এবং #enable-debug-for-store-billing চালু করুন।
  3. HTTPS-এর মাধ্যমে আপনার সাইট পরিবেশন করুন। HTTP-তে ডিজিটাল কন্টেন্ট API উপলভ্য নেই।

Play Store থেকে আপনার অ্যাপ ইনস্টল করা হলে, আপনার ফ্ল্যাগ প্রয়োজন নেই। টেস্ট অ্যাকাউন্ট ও টেস্ট প্রোডাক্টের মাধ্যমে টেস্ট করতে, আপনার Google Play Billing Library ইন্টিগ্রেশন টেস্ট করুন দেখুন।

পরবর্তী ধাপ