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:
- Digital Goods API: Haalt productdetails en de aankopen van de gebruiker op.
- Payment Request API: Start het aankoopproces.
Vereisten
Je hebt het volgende nodig om Google Play Billing in te stellen:
- Een Google Play-ontwikkelaarsaccount en een Google Payments-verkopersaccount die aan elkaar zijn gekoppeld.
- Een Play Store-vermelding met een release op de openbare, gesloten of interne testtrack.
- De producten en abonnementen van je app die je in de Play Console hebt ingesteld.
- Een project voor vertrouwde webactiviteit met een werkende configuratie van Digital Asset Links.
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:
- Gebruik Android 9 of hoger met ontwikkelaarsopties aangezet.
- Ga in Chrome naar
chrome://flagsen zet#enable-debug-for-store-billingaan. - 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
- Verifieer aankopen op je backend met een clientbibliotheek van de Google Play Developer API.
- Meer informatie over hoe je abonnementen verkoopt.
- Stel realtime meldingen voor ontwikkelaars in om abonnementswijzigingen bij te houden.