Wenn Ihre App über Google Play vertrieben wird und Sie digitale Waren verkaufen oder Abos anbieten möchten, müssen Sie Google Play Billing verwenden. Google Play Billing bietet Tools zur Verwaltung Ihres Katalogs, Ihrer Preise und Abos, nützliche Berichte und einen Bezahlvorgang, der vom Play Store unterstützt wird und Ihren Nutzern bereits vertraut ist.
Für Apps, die mit Trusted Web Activities erstellt und über den Google Play Store bereitgestellt werden, können Sie jetzt die Payment Request API und die Digital Goods API verwenden, um die Google Play-Abrechnung zu integrieren. Sie ist in Chrome 101 und höher für Android und ChromeOS verfügbar.
In diesem Leitfaden erfährst du, wie du deiner PWA Google Play Billing-Unterstützung hinzufügst und sie für die Bereitstellung im Google Play Store für ChromeOS und den Play Store verpackst.
Sie verwenden zwei Webplattform-APIs, um Ihrer PWA Play Billing-Unterstützung hinzuzufügen. Mit der Digital Goods API werden SKU-Informationen erfasst und Käufe und Berechtigungen aus dem Play Store geprüft. Mit der Payment Request API wird der Google Play Store als Zahlungsmethode konfiguriert und der Kaufvorgang abgeschlossen.
Apps im Play Store monetarisieren
Es gibt zwei Möglichkeiten, wie Sie mit der Google Play-Abrechnung im Play Store Einnahmen mit Ihrer App erzielen können:
- Mit In-App-Käufen können Sie sowohl langlebige als auch Verbrauchsgüter verkaufen, z. B. zusätzliche Funktionen oder die Entfernung von Anzeigen.
- Abos bieten Nutzern gegen eine wiederkehrende Gebühr kontinuierlichen Zugriff auf Inhalte oder Dienstleistungen, z. B. Nachrichtenabos oder Mitgliedschaften.
Voraussetzungen
Für die Einrichtung der Google Play-Abrechnung benötigen Sie Folgendes:
- Ein Google Play-Entwicklerkonto und ein Google Payments-Händlerkonto, die miteinander verknüpft sind.
- Einen Play Store-Eintrag mit einer Veröffentlichung im öffentlichen, geschlossenen oder internen Test-Track
- Sie können die Produkte und Abos Ihrer App im Play Store erstellen und konfigurieren.
- Ein mit Bubblewrap generiertes Projekt mit einer funktionierenden Digital Asset Links-Konfiguration.
Bubblewrap-Projekt aktualisieren
Wenn Bubblewrap noch nicht installiert ist, müssen Sie es installieren. Weitere Informationen finden Sie in der Kurzanleitung. Wenn Sie Bubblewrap bereits installiert haben, aktualisieren Sie es auf Version 1.8.2 oder höher.
Bei Bubblewrap ist die Funktion ebenfalls ausgeblendet. Wenn Sie die Funktion aktivieren möchten, müssen Sie die Projektkonfiguration im twa-manifest.json
im Stammverzeichnis des Projekts ändern und sowohl alphaDependencies
als auch die Funktion playBilling
aktivieren:
...,
"enableNotifications": true,
"features": {
"playBilling": {
"enabled": true
}
},
"alphaDependencies": {
"enabled": true
},
...
Nachdem Sie die Konfigurationsdatei aktualisiert haben, führen Sie bubblewrap update
aus, um die Konfiguration auf das Projekt anzuwenden, gefolgt von bubblewrap build
, um ein neues Android-Paket zu generieren und dieses in den Play Store hochzuladen.
Funktion zur Erkennung der Verfügbarkeit der Digital Goods API und der Google Play Billing API
Die Digital Goods API wird derzeit nur von Chrome unterstützt, wenn die PWA in einer vertrauenswürdigen Webaktivität ausgeführt wird. Sie können prüfen, ob sie verfügbar ist, indem Sie im window
-Objekt nach getDigitalGoodsService
suchen:
if ('getDigitalGoodsService' in window) {
// Digital Goods API is supported!
}
Die Digital Goods API kann in jedem Browser verfügbar sein und verschiedene Shops unterstützen. Wenn Sie prüfen möchten, ob ein bestimmtes Store-Backend unterstützt wird, müssen Sie getDigitalGoodsService()
aufrufen und dabei die Store-ID als Parameter übergeben. Der Google Play Store wird durch den String https://play.google.com/billing
identifiziert:
if ('getDigitalGoodsService' in window) {
// Digital Goods API is supported!
try {
const service =
await window.getDigitalGoodsService('https://play.google.com/billing');
// Google Play Billing is supported!
} catch (error) {
// Google Play Billing is not available. Use another payment flow.
return;
}
}
Details zu einer SKU abrufen
Die Digital Goods API bietet getDetails()
, mit der Informationen wie der Produkttitel, die Beschreibung und vor allem der Preis aus dem Zahlungs-Back-End abgerufen werden können.
Sie können diese Informationen dann in Ihrer Benutzeroberfläche verwenden und dem Nutzer weitere Details zur Verfügung stellen:
const skuDetails = await service.getDetails(['shiny_sword', 'gem']);
for (item of skuDetails) {
// Format the price according to the user locale.
const localizedPrice = new Intl.NumberFormat(
navigator.language,
{style: 'currency', currency: item.price.currency}
).format(item.price.value);
// Render the price to the UI.
renderProductDetails(
item.itemId, item.title, localizedPrice, item.description);
}
Kaufvorgang erstellen
Der Konstruktor für eine Zahlungsanfrage nimmt zwei Parameter entgegen: eine Liste von Zahlungsmethoden und eine Liste von Zahlungsdetails.
Wenn Sie sich in der Funktion „Vertrauenswürdige Webaktivitäten“ befinden, müssen Sie die Google Play-Abrechnung als Zahlungsmethode verwenden. Legen Sie dazu https://play.google.com/billing
als Kennung fest und fügen Sie die Artikelnummer des Produkts als Datenelement hinzu:
async function makePurchase(service, sku) {
// Define the preferred payment method and item ID
const paymentMethods = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku,
}
}];
...
}
Auch wenn die Zahlungsdetails erforderlich sind, werden diese Werte von der Play-Abrechnung ignoriert und die Werte verwendet, die beim Erstellen der Artikelnummer in der Play Console festgelegt wurden. Sie können also mit falschen Werten ausgefüllt werden:
const paymentDetails = {
total: {
label: `Total`,
amount: {currency: `USD`, value: `0`}
}
};
const request = new PaymentRequest(paymentMethods, paymentDetails);
Rufe show()
für das Zahlungsanfrageobjekt auf, um den Zahlungsvorgang zu starten. Wenn die Zusicherung erfolgreich ist, war die Zahlung möglicherweise erfolgreich. Wenn der Vorgang fehlschlägt, hat der Nutzer die Zahlung wahrscheinlich abgebrochen.
Wenn die Zusicherung erfolgreich ist, müssen Sie den Kauf bestätigen. Zum Schutz vor Betrug muss dieser Schritt über Ihr Backend implementiert werden. In der Play Billing-Dokumentation erfahren Sie, wie Sie die Bestätigung in Ihrem Backend implementieren. Wenn Sie den Kauf nicht bestätigen, erhält der Nutzer nach drei Tagen eine Erstattung und Google Play widerruft den Kauf.
...
const request = new PaymentRequest(paymentMethods, paymentDetails);
try {
const paymentResponse = await request.show();
const {purchaseToken} = paymentResponse.details;
// Call backend to validate and acknowledge the purchase.
if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
// Optional: tell the PaymentRequest API the validation was
// successful. The user-agent may show a "payment successful"
// message to the user.
const paymentComplete = await paymentResponse.complete('success');
} else {
// Optional: tell the PaymentRequest API the validation failed. The
// user agent may show a message to the user.
const paymentComplete = await paymentResponse.complete('fail');
}
} catch(e) {
// The purchase failed, and we can handle the failure here. AbortError
// usually means a user cancellation
}
...
Optional kann consume()
für ein purchaseToken aufgerufen werden, um den Kauf als aufgebraucht zu kennzeichnen und einen erneuten Kauf zu ermöglichen.
Zusammengenommen sieht eine Kaufmethode so aus:
async function makePurchase(service, sku) {
// Define the preferred payment method and item ID
const paymentMethods = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku,
}
}];
// The "total" member of the paymentDetails is required by the Payment
// Request API, but is not used when using Google Play Billing. We can
// set it up with bogus details.
const paymentDetails = {
total: {
label: `Total`,
amount: {currency: `USD`, value: `0`}
}
};
const request = new PaymentRequest(paymentMethods, paymentDetails);
try {
const paymentResponse = await request.show();
const {purchaseToken} = paymentResponse.details;
// Call backend to validate and acknowledge the purchase.
if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
// Optional: consume the purchase, allowing the user to purchase
// the same item again.
service.consume(purchaseToken);
// Optional: tell the PaymentRequest API the validation was
// successful. The user-agent may show a "payment successful"
// message to the user.
const paymentComplete =
await paymentResponse.complete('success');
} else {
// Optional: tell the PaymentRequest API the validation failed.
// The user agent may show a message to the user.
const paymentComplete = await paymentResponse.complete('fail');
}
} catch(e) {
// The purchase failed, and we can handle the failure here.
// AbortError usually means a user cancellation
}
}
Status vorhandener Käufe prüfen
Mit der Digital Goods API können Sie prüfen, ob der Nutzer bestehende Berechtigungen (noch nicht in Anspruch genommene In-App-Käufe oder laufende Abos) aus früheren Käufen hat, die er auf einem anderen Gerät, bei einer früheren Installation, über einen Gutscheincode oder beim letzten Öffnen der App getätigt hat.
const service =
await window.getDigitalGoodsService('https://play.google.com/billing');
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
// Update the UI with items the user is already entitled to.
console.log(`Users has entitlement for ${p.itemId}`);
}
Prüfen Sie auch, ob Käufe, die Sie zuvor getätigt haben, nicht berücksichtigt wurden. Wir empfehlen dir, Käufe so schnell wie möglich zu bestätigen, damit die Berechtigungen deiner Nutzer in deiner App korrekt widergespiegelt werden.
const service =
await window.getDigitalGoodsService("https://play.google.com/billing");
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);
// Update the UI with items the user is already entitled to.
console.log(`Users has entitlement for ${p.itemId}`);
}
Integration testen
Auf einem Android-Entwicklungsgerät
Sie können die Digital Goods API auf einem Android-Entwicklungsgerät für Tests aktivieren:
- Achten Sie darauf, dass Sie Android 9 oder höher mit aktiviertem Entwicklermodus verwenden.
- Installieren Sie Chrome 101 oder höher.
- Aktivieren Sie die folgenden Flags in Chrome. Rufen Sie dazu
chrome://flags
auf und suchen Sie nach dem Namen des Flags:#enable-debug-for-store-billing
- Stellen Sie sicher, dass die Website mit einem HTTPS-Protokoll gehostet wird. Wenn Sie http verwenden, ist die API
undefined
.
Auf einem ChromeOS-Gerät
Die Digital Goods API ist ab ChromeOS-Version 89 in der stabilen Version verfügbar. In der Zwischenzeit kannst du die Digital Goods API testen:
- Installieren Sie Ihre App aus dem Play Store auf dem Gerät.
- Die Website muss über ein HTTPS-Protokoll gehostet werden. Wenn Sie HTTP verwenden, ist die API
undefined
Mit Testnutzern und QA-Teams
Der Play Store bietet Angebote für Tests, einschließlich Nutzertestkonten und Test-Artikelnummern. Weitere Informationen finden Sie in der Testdokumentation für die Google Play-Abrechnung.
Wie geht es weiter?
Wie in diesem Dokument erläutert, hat die Play Billing API clientseitige Komponenten, die von der Digital Goods API verwaltet werden, und serverseitige Komponenten.
- Sehen Sie sich das Beispiel von Peter Conn unter https://github.com/PEConn/beer an.
- Weitere Informationen finden Sie in der Google Play-Dokumentation zur Bestätigung von Käufen.
- Du kannst eine der Google Play Developer API-Clientbibliotheken verwenden, die in mehreren Sprachen verfügbar sind.
- Wenn Sie in Ihrer Anwendung ein Abomodell implementieren, lesen Sie die Play Billing-Dokumentation zu Abos.
- Implementiere Entwicklerbenachrichtigungen in Echtzeit (Real-Time Developer Notifications, RTDN) und abonniere Benachrichtigungen, damit dein Backend benachrichtigt wird, wenn sich der Status eines Abos ändert, anstatt dessen Status bei Google Play abzufragen.
- Implementiere
linkedPurchaseToken
, um doppelte Abos zu vermeiden. In diesem Blogpost erfahren Sie, wie Sie sie richtig implementieren.