Google Play Billing in Ihrer vertrauenswürdigen Web-Aktivität verwenden

Dieser Leitfaden richtet sich an Web-Apps, die als vertrauenswürdige Web-Aktivität verpackt sind. Informationen zu Android-Apps, die in Kotlin oder Java geschrieben wurden, finden Sie in der Dokumentation zu Google Play Billing.

Apps bei Google Play, in denen digitale Waren oder Abos verkauft werden, müssen Google Play Billing verwenden. In einer vertrauenswürdigen Web-Aktivität erfolgt die Integration über die folgenden Web-APIs, die ab Chrome 101 unter Android und ChromeOS verfügbar sind:

Voraussetzungen

Für die Einrichtung von Google Play Billing benötigen Sie Folgendes:

Berechnen Sie Nutzern für das Herunterladen Ihrer App aus dem Google Play Store kein Entgelt. Ihre PWA ist weiterhin im Web verfügbar, sodass ein kostenpflichtiger Download den Zugriff nicht einschränkt. Verkaufe stattdessen Funktionen oder Inhalte über In-App-Käufe oder Abos.

Google Play Billing in Ihrem Android-Projekt aktivieren

Wenn Sie Ihre App mit Bubblewrap erstellen, aktivieren Sie das Feature playBilling in twa-manifest.json im Stammverzeichnis Ihres Projekts:

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

Führen Sie dann bubblewrap update gefolgt von bubblewrap build aus und laden Sie das neue Android-Paket in den Google Play Store hoch.

Wenn Sie Ihre App in Android Studio erstellen, fügen Sie die Android Browser Helper Play Billing Library hinzu. Informationen zu den erforderlichen Änderungen an DelegationService und AndroidManifest.xml finden Sie in der twa-play-billing-Demo.

Unterstützung für Google Play Billing prüfen

Rufen Sie getDigitalGoodsService() mit der Google Play Store-ID https://play.google.com/billing auf. Wenn die Methode fehlt oder der Aufruf fehlschlägt, verwende einen anderen Zahlungsablauf:

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

Produktdetails anzeigen

Verwende getDetails(), um den Titel, die Beschreibung und den Preis für deine Produkt-IDs abzurufen, damit die angezeigten Preise mit denen im Google Play Store übereinstimmen:

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);
}

Die API für digitale Waren kann Ihre Produkt-IDs nicht auflisten. Wenn Sie sie über Ihr Backend abfragen möchten, verwenden Sie die Google Play Developer API.

Etwas kaufen

Erstellen Sie ein PaymentRequest mit https://play.google.com/billing als Zahlungsmethode und der Produkt-ID als sku in data. Google Play Billing verwendet den Preis aus der Play Console. Daher ist total erforderlich, wird aber ignoriert.

Nachdem show() aufgelöst wurde, sende das Kaufftoken an dein Backend, um den Kauf zu bestätigen und zu bestätigen. Wenn Sie einen Kauf nicht innerhalb von drei Tagen bestätigen, erstattet Google Play dem Nutzer den Kaufpreis und widerruft den Kauf.

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

Käufe eines Nutzers prüfen

Mit listPurchases() kannst du Artikel finden, die dem Nutzer gehören, z. B. aktive Abos, nicht genutzte Käufe oder eingelöste Gutscheincodes. Prüfen Sie jeden Kauf in Ihrem Backend und bestätigen Sie alle noch nicht bestätigten Käufe:

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

Integration testen

So testen Sie Ihre App auf einem Android-Gerät, bevor Sie sie im Google Play Store veröffentlichen:

  1. Android 9 oder höher mit aktivierten Entwickleroptionen
  2. Rufen Sie in Chrome chrome://flags auf und aktivieren Sie #enable-debug-for-store-billing.
  3. Stellen Sie Ihre Website über HTTPS bereit. Die Digital Goods API ist nicht über HTTP verfügbar.

Wenn Ihre App aus dem Google Play Store installiert wird, benötigen Sie das Flag nicht. Informationen zum Testen mit Testkonten und Testprodukten finden Sie unter Einbindung der Google Play Billing Library testen.

Nächste Schritte