Google Play Billing gebruiken in je vertrouwde webactiviteit

Deze gids is bedoeld voor web-apps die zijn verpakt als een vertrouwde webactiviteit. Voor Android-apps die zijn geschreven in Kotlin of Java, ga je naar de documentatie over Google Play Billing.

Apps op Google Play die digitale artikelen of abonnementen verkopen, moeten Google Play Billing gebruiken. In een vertrouwde webactiviteit integreer je met de volgende web-API's, die beschikbaar zijn in Chrome 101 en hoger op Android en ChromeOS:

Vereisten

Je hebt het volgende nodig om Google Play Billing in te stellen:

Breng gebruikers geen kosten in rekening om je app te downloaden via de Play Store. Je PWA is nog steeds beschikbaar op internet, dus een betaalde download beperkt de toegang niet. Verkoop in plaats daarvan functies of content met in-app aankopen of abonnementen.

Play Billing aanzetten in je Android-project

Als je je app maakt met Bubblewrap, zet je de functie playBilling aan in twa-manifest.json in de root van je project:

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

Voer daarna bubblewrap update uit, gevolgd door bubblewrap build, en upload het nieuwe Android-pakket naar de Play Store.

Als je je app maakt in Android Studio, voeg je de Android Browser Helper Play Billing Library toe. Ga naar de twa-play-billing-demo voor de vereiste wijzigingen in DelegationService en AndroidManifest.xml.

Checken of Google Play Billing wordt ondersteund

Bel getDigitalGoodsService() met de Play Store-ID, https://play.google.com/billing. Als de methode ontbreekt of het gesprek mislukt, gebruik je een andere betalingsstroom:

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

Productdetails tonen

Gebruik getDetails() om de titel, beschrijving en prijs voor je product-ID's op te halen, zodat de prijzen die je toont overeenkomen met de 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);
}

De API voor digitale artikelen kan je product-ID's niet vermelden. Gebruik de Google Play Developer API om ze op te vragen vanuit je backend.

Een aankoop doen

Maak een PaymentRequest met https://play.google.com/billing als betaalmethode en de product-ID als sku in data. Google Play Billing gebruikt de prijs uit de Play Console, dus total is vereist maar wordt genegeerd.

Nadat show() is opgelost, stuur je de aankooptoken naar je backend om de aankoop te verifiëren en te bevestigen. Als je een aankoop niet binnen 3 dagen bevestigt, voert Google Play een terugbetaling uit aan de gebruiker en wordt de aankoop herroepen.

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

De aankopen van een gebruiker checken

Gebruik listPurchases() om items te vinden die de gebruiker bezit, zoals actieve abonnementen, ongebruikte aankopen of ingewisselde promotiecodes. Verifieer elke aankoop in je backend en bevestig elke aankoop die je nog niet hebt bevestigd:

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

Uw integratie testen

Volg deze stappen om te testen op een Android-apparaat voordat je publiceert in de Play Store:

  1. Gebruik Android 9 of hoger met ontwikkelaarsopties aangezet.
  2. Ga in Chrome naar chrome://flags en zet #enable-debug-for-store-billing aan.
  3. Lever je site via HTTPS. De API voor digitale artikelen is niet beschikbaar via HTTP.

Als je app is geïnstalleerd via de Play Store, heb je de markering niet nodig. Als je wilt testen met testaccounts en testproducten, ga je naar Je integratie van de Google Play Billing Library testen.

Volgende stappen