Menggunakan Layanan Penagihan Google Play di Aktivitas Web Tepercaya

Panduan ini ditujukan untuk aplikasi web yang dipaketkan sebagai Aktivitas Web Tepercaya. Untuk aplikasi Android yang ditulis dalam Kotlin atau Java, lihat dokumentasi Layanan Penagihan Google Play.

Aplikasi di Google Play yang menjual produk digital atau langganan harus menggunakan Layanan Penagihan Google Play. Dalam Aktivitas Web Tepercaya, Anda berintegrasi dengannya menggunakan API web berikut, yang tersedia di Chrome 101 dan yang lebih baru di Android dan ChromeOS:

Persyaratan

Untuk menyiapkan Layanan Penagihan Google Play, Anda memerlukan hal berikut:

Jangan mengenakan tagihan kepada pengguna untuk mendownload aplikasi Anda dari Google Play Store. PWA Anda masih tersedia di web, sehingga download berbayar tidak membatasi akses. Sebagai gantinya, jual fitur atau konten dengan pembelian dalam aplikasi atau langganan.

Mengaktifkan Layanan Penagihan Play di project Android Anda

Jika Anda mem-build aplikasi dengan Bubblewrap, aktifkan fitur playBilling di twa-manifest.json di root project Anda:

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

Kemudian, jalankan bubblewrap update diikuti dengan bubblewrap build, lalu upload paket Android baru ke Google Play Store.

Jika Anda mem-build aplikasi di Android Studio, tambahkan library Play Billing Android Browser Helper. Untuk perubahan DelegationService dan AndroidManifest.xml yang diperlukan, lihat demo twa-play-billing.

Memeriksa dukungan Layanan Penagihan Google Play

Panggil getDigitalGoodsService() dengan ID Google Play Store, https://play.google.com/billing. Jika metode tidak ada atau panggilan gagal, gunakan alur pembayaran lain:

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.
  }
}

Menampilkan detail produk

Gunakan getDetails() untuk mengambil judul, deskripsi, dan harga untuk ID produk Anda, sehingga harga yang Anda tampilkan sesuai dengan Google 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 tidak dapat mencantumkan ID produk Anda. Untuk mengkuerinya dari backend, gunakan Google Play Developer API.

Melakukan pembelian

Buat PaymentRequest dengan https://play.google.com/billing sebagai metode pembayaran dan ID produk sebagai sku di data. Layanan Penagihan Google Play menggunakan harga dari Konsol Play, sehingga total diperlukan, tetapi diabaikan.

Setelah show() selesai, kirim token pembelian ke backend Anda untuk memverifikasi dan mengonfirmasi pembelian. Jika Anda tidak mengonfirmasi pembelian dalam waktu tiga hari, Google Play akan mengembalikan dana pengguna dan mencabut pembelian.

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.
  }
}

Memeriksa pembelian pengguna

Gunakan listPurchases() untuk menemukan item yang dimiliki pengguna, seperti langganan aktif, pembelian yang belum digunakan, atau kode promo yang ditukarkan. Verifikasi setiap pembelian di backend Anda, dan konfirmasi pembelian yang belum Anda konfirmasi:

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.
}

Menguji integrasi Anda

Untuk menguji di perangkat Android sebelum memublikasikan ke Google Play Store, ikuti langkah-langkah berikut:

  1. Gunakan Android 9 atau yang lebih baru dengan opsi developer diaktifkan.
  2. Di Chrome, buka chrome://flags dan aktifkan #enable-debug-for-store-billing.
  3. Menayangkan situs Anda melalui HTTPS. Digital Goods API tidak tersedia melalui HTTP.

Jika aplikasi Anda diinstal dari Google Play Store, Anda tidak memerlukan flag. Untuk menguji dengan akun pengujian dan produk pengujian, lihat Menguji integrasi Google Play Billing Library Anda.

Langkah berikutnya