Güvenilir Web Etkinliğinizde Google Play Faturalandırma'yı kullanma

Bu kılavuz, Güvenilir Web Etkinliği olarak paketlenmiş web uygulamaları içindir. Kotlin veya Java ile yazılmış Android uygulamaları için Google Play Faturalandırma belgelerine bakın.

Google Play'de dijital ürün veya abonelik satan uygulamalar Google Play Faturalandırma'yı kullanmalıdır. Güvenilir Web Etkinliği'nde, Android ve ChromeOS'te Chrome 101 ve sonraki sürümlerde kullanılabilen aşağıdaki web API'lerini kullanarak entegrasyon yaparsınız:

Şartlar

Google Play Faturalandırma'yı ayarlamak için aşağıdakiler gerekir:

Uygulamanızı Play Store'dan indirmeleri için kullanıcılardan ödeme almayın. PWA'nız web'de hâlâ kullanılabilir olduğundan ücretli indirme işlemi erişimi kısıtlamaz. Bunun yerine, özellikleri veya içerikleri uygulama içi satın alma işlemleri ya da aboneliklerle satın.

Android projenizde Google Play Faturalandırma'yı etkinleştirme

Uygulamanızı Bubblewrap ile oluşturuyorsanız projenizin kök dizinindeki twa-manifest.json dosyasında playBilling özelliğini etkinleştirin:

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

Ardından bubblewrap update ve bubblewrap build komutlarını çalıştırın ve yeni Android paketini Play Store'a yükleyin.

Uygulamanızı Android Studio'da oluşturuyorsanız Android Browser Helper Play Faturalandırma Kitaplığı'nı ekleyin. Gerekli DelegationService ve AndroidManifest.xml değişiklikleri için twa-play-billing demosuna bakın.

Google Play Faturalandırma desteğini kontrol etme

Play Store tanımlayıcısı https://play.google.com/billing ile getDigitalGoodsService() yöntemini çağırın. Yöntem eksikse veya çağrı başarısız olursa başka bir ödeme akışı kullanın:

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

Ürün ayrıntılarını gösterme

Ürün kimliklerinizin başlığını, açıklamasını ve fiyatını almak için getDetails() kullanın. Böylece gösterdiğiniz fiyatlar Play Store ile eşleşir:

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, ürün kimliklerinizi listeleyemiyor. Bunları arka ucunuzdan sorgulamak için Google Play Developer API'yi kullanın.

Özelliği satın alma

data içinde ödeme yöntemi https://play.google.com/billing ve ürün kimliği sku olan bir PaymentRequest oluşturun. Google Play Faturalandırma, Google Play Console'daki fiyatı kullandığından total zorunludur ancak yok sayılır.

show() çözümlendikten sonra satın alma işlemini doğrulamak ve onaylamak için satın alma jetonunu arka ucunuza gönderin. Satın alma işlemini üç gün içinde onaylamazsanız Google Play kullanıcıya geri ödeme yapar ve satın alma işlemini iptal eder.

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

Kullanıcının satın alma işlemlerini kontrol etme

Kullanıcının sahip olduğu öğeleri (ör. etkin abonelikler, kullanılmamış satın alma işlemleri veya kullanılmış promosyon kodları) bulmak için listPurchases() yöntemini kullanın. Arka ucunuzda her satın alma işlemini doğrulayın ve onaylamadığınız tüm satın alma işlemlerini onaylayın:

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

Entegrasyonunuzu test edin

Play Store'da yayınlamadan önce bir Android cihazda test etmek için aşağıdaki adımları uygulayın:

  1. Geliştirici seçenekleri etkinleştirilmiş Android 9 veya sonraki bir sürümü kullanın.
  2. Chrome'da chrome://flags adresine gidip #enable-debug-for-store-billing ayarını etkinleştirin.
  3. Sitenizi HTTPS üzerinden sunun. Dijital Ürünler API'si, HTTP üzerinden kullanılamaz.

Uygulamanız Play Store'dan yüklendiğinde bu işarete ihtiyacınız yoktur. Test hesapları ve test ürünleriyle test etmek için Google Play Faturalandırma Kitaplığı entegrasyonunuzu test etme başlıklı makaleyi inceleyin.

Sonraki adımlar