استفاده از «خدمات صورت‌حساب Google Play» در «فعالیت وب مطمئن»

این راهنما برای برنامه‌های وبی است که به‌صورت فعالیت وب مطمئن بسته‌بندی شده‌اند. برای برنامه‌های Android نوشته‌شده در Kotlin یا Java، به سند «خدمات صورت‌حساب Google Play» مراجعه کنید.

برنامه‌هایی که در Google Play کالاهای دیجیتال یا اشتراک می‌فروشند باید از «خدمات صورت‌حساب Google Play» استفاده کنند. در «فعالیت وب مطمئن»، بااستفاده از میاناهای برنامه‌سازی کاربردی وب زیر که در Chrome 101 و نسخه‌های جدیدتر در Android و ChromeOS دردسترس است، با آن ادغام می‌شوید:

الزامات

برای راه‌اندازی «خدمات صورت‌حساب Google Play»، به موارد زیر نیاز دارید:

برای بارگیری برنامه‌تان از «فروشگاه Play» از کاربران هزینه دریافت نکنید. برنامه وب پیشرو شما همچنان در وب دردسترس است، بنابراین بارگیری پولی دسترسی را محدود نمی‌کند. درعوض، ویژگی‌ها یا محتوا را با خرید درون‌برنامه یا اشتراک بفروشید.

فعال کردن «خدمات صورت‌حساب Play» در پروژه Android

اگر برنامه‌تان را با Bubblewrap می‌سازید، ویژگی playBilling را در twa-manifest.json در ریشه پروژه‌تان فعال کنید:

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

سپس bubblewrap update و بعداز آن bubblewrap build را اجرا کنید و بسته جدید Android را در «فروشگاه Play» بارگذاری کنید.

اگر برنامه‌تان را در Android Studio می‌سازید، کتابخانه خدمات صورت‌حساب Play «کمک‌یار مرورگر Android» را اضافه کنید. برای تغییرات لازم DelegationService و AndroidManifest.xml، نسخه نمایشی twa-play-billing را ببینید.

بررسی پشتیبانی «خدمات صورت‌حساب Google Play»

با شناسه «فروشگاه Play» با getDigitalGoodsService() تماس بگیرید، https://play.google.com/billing. اگر روش وجود ندارد یا تماس برقرار نمی‌شود، از جریان پرداخت دیگری استفاده کنید:

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» مطابقت داشته باشد:

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 استفاده کنید.

انجام خرید

PaymentRequest را با https://play.google.com/billing به‌عنوان روش پرداخت و شناسه محصول را به‌عنوان sku در data ایجاد کنید. «خدمات صورت‌حساب Google Play» از قیمت «کنسول Play» استفاده می‌کند، بنابراین 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.
}

آزمایش کردن ادغام

برای آزمایش در دستگاه Android قبل‌از انتشار در «فروشگاه Play»، این مراحل را دنبال کنید:

  1. از Android نسخه ۹ یا بالاتر با گزینه‌های توسعه‌دهندگان فعال استفاده کنید.
  2. در Chrome، به chrome://flags بروید و #enable-debug-for-store-billing را فعال کنید.
  3. سایتتان را ازطریق HTTPS ارائه دهید. Digital Goods API ازطریق HTTP دردسترس نیست.

وقتی برنامه‌تان از «فروشگاه Play» نصب شده باشد، به پرچم نیاز ندارید. برای آزمایش کردن با حساب‌های آزمایشی و محصولات آزمایشی، به آزمایش کردن یکپارچه‌سازی «کتابخانه خدمات صورت‌حساب Google Play» مراجعه کنید.

مراحل بعدی