Jeśli Twoja aplikacja jest rozpowszechniana w Google Play i chcesz sprzedawać produkty cyfrowe lub oferować wymaga korzystania z Płatności w Google Play. Płatności w Google Play oferują narzędzia do zarządzania katalogu, cen i subskrypcji, przydatnych raportów oraz procesu płatności w Google Play Sklep, który jest już znany Twoim użytkownikom.
W przypadku aplikacji utworzonych w ramach zaufanej aktywności internetowej i dostarczanych ze Sklepu Google Play: może teraz korzystać z interfejsów Payment Request API oraz Digital Goods API do integracji z Płatności w Google Play. Jest dostępna w Chrome 101 i nowszych wersjach na Androida i ChromeOS.
Z tego przewodnika dowiesz się, jak dodać obsługę Płatności w Google Play do aplikacji PWA i dodać ją w pakiecie. dystrybucji w Sklepie Google Play zarówno w ChromeOS, jak i w Sklepie Play.
Aby dodać obsługę Płatności w Play do aplikacji PWA, użyj 2 interfejsów API platformy internetowej. Digital Goods API służy do zbierania informacji o kodach SKU oraz sprawdzania zakupów i uprawnień w Sklepie Play. Interfejs Payment Request API służy do konfigurowania Sklepu Google Play jako formę płatności i sfinalizowania zakupu.
Jak zarabiać na aplikacjach w Sklepie Play
Możesz zarabiać na swojej aplikacji za pomocą Płatności w Google Play w Sklepie Play na 2 sposoby:
- Zakupy w aplikacji umożliwiają sprzedaż zarówno trwałych, jak i zużywanych towarów wirtualnych, takich jak dodatkowe funkcje aplikacji lub usunięcie reklam.
- subskrypcje – oferowanie użytkownikom stałego dostępu do treści lub usług za cykliczną opłatę. takich jak subskrypcje wiadomości lub wspieranie kanału.
Wymagania
Aby skonfigurować Płatności w Google Play, potrzebujesz:
- konto dewelopera w Google Play i konto sprzedawcy w Google Payments, które: połączonych ze sobą.
- stronę w Sklepie Play z oznaczeniem dostępnej publicznie, na ścieżce testu zamkniętego lub wewnętrznego.
- Tworzenie i konfigurowanie produktów i subskrypcji z aplikacji w Sklepie Play.
- Wygenerowany projekt Bubblewrap z działającą konfiguracją Digital Asset Links.
Aktualizowanie projektu Bubblewrap
Jeśli nie masz zainstalowanej aplikacji Bubblewrap, musisz ją zainstalować. Zobacz Krótki przewodnik, w którym znajdziesz szczegółowe informacje o tym, jak zacząć korzystać z tej usługi. Jeśli masz już folię bąbelkową, należy zaktualizować system do wersji 1.8.2 lub nowszej.
Folia bąbelkowa ma również funkcję flagi. W
Aby go włączyć, musisz zmodyfikować konfigurację projektu w: twa-manifest.json
,
znajduje się w katalogu głównym projektu i włącza zarówno alphaDependencies
, jak i playBilling
cecha:
...,
"enableNotifications": true,
"features": {
"playBilling": {
"enabled": true
}
},
"alphaDependencies": {
"enabled": true
},
...
Po zaktualizowaniu pliku konfiguracji uruchom polecenie bubblewrap update
, aby zastosować konfigurację do
projektu, a po nim bubblewrap build
, aby wygenerować nowy pakiet na Androida i przesłać ten
do Sklepu Play.
Funkcja wykrywania dostępności interfejsu Digital Goods API i Płatności w Google Play
Interfejs Digital Goods API jest obecnie obsługiwany tylko przez Chrome tylko wtedy, gdy progresywna aplikacja internetowa jest wykonywana w aplikacji
zaufaną aktywność w internecie i możesz określić, czy jest dostępna,
getDigitalGoodsService
w obiekcie window
:
if ('getDigitalGoodsService' in window) {
// Digital Goods API is supported!
}
Interfejs Digital Goods API może być dostępny w dowolnej przeglądarce i obsługiwać różne sklepy. Aby
sprawdź, czy dany backend jest obsługiwany, musisz wywołać
getDigitalGoodsService()
przekazuje identyfikator sklepu jako parametr. Zidentyfikowano Sklep Google Play
ciągiem https://play.google.com/billing
:
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;
}
}
Pobieranie szczegółów kodu SKU
Interfejs API towarów cyfrowych udostępnia funkcję getDetails()
, która umożliwia pobieranie informacji takich jak
nazwę i opis produktu oraz, co najważniejsze, cenę z systemu płatności.
Następnie możesz użyć tych informacji w interfejsie, aby podać użytkownikowi więcej szczegółów:
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);
}
Tworzenie procesu zakupu
Konstruktor dla PaymentRequest ma dwa parametry: listę form płatności i listę dane do płatności.
W ramach Zaufanej aktywności w internecie musisz używać formy płatności w Google Play.
ustawiając https://play.google.com/billing
jako identyfikator i dodając kod SKU produktu jako
użytkownik danych:
async function makePurchase(service, sku) {
// Define the preferred payment method and item ID
const paymentMethods = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku,
}
}];
...
}
Mimo że dane do płatności są wymagane, Płatności w Play je zignorują i będą używać metody ustawiane podczas tworzenia kodu SKU w Konsoli Play tak, aby można było je wypełnić błędnymi wartościami:
const paymentDetails = {
total: {
label: `Total`,
amount: {currency: `USD`, value: `0`}
}
};
const request = new PaymentRequest(paymentMethods, paymentDetails);
Aby rozpocząć przepływ płatności, wywołaj show()
w obiekcie żądania płatności. Jeśli obietnica się powiedzie
być może uda się zrealizować płatność. Jeśli płatność się nie uda, użytkownik prawdopodobnie przerwał płatność.
Jeśli obietnica zostanie zrealizowana, musisz potwierdzić i potwierdzić zakup. Aby chronić się przed oszustwami, musisz wykonać ten krok z wykorzystaniem Twojego backendu. Zobacz Dokumentacja Płatności w Play wyjaśniająca, jak wdrożyć weryfikację w backendzie. Jeśli nie potwierdzisz zakupu, Po 3 dniach użytkownik otrzyma zwrot środków, a Google Play anuluje zakup.
...
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
}
...
Opcjonalnie obiekt consume()
może być wywoływany dla purchaseToken, aby oznaczyć zakup jako wykorzystany.
że będzie można go kupić.
Po zastosowaniu wszystkich elementów metoda zakupu wygląda tak:
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
}
}
Sprawdzanie stanu dotychczasowych zakupów
Interfejs Digital Goods API pozwala sprawdzić, czy użytkownik ma jakiekolwiek uprawnienia (w aplikacji niewykorzystane jeszcze zakupy lub trwające subskrypcje) z wcześniejszych zakupów. zrobionych na innym urządzeniu, w ramach wcześniejszej instalacji, wykorzystanej przy użyciu kodu promocyjnego lub podczas ostatniego uruchomienia aplikacji.
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}`);
}
To także dobry moment na sprawdzenie, czy nie ma informacji o dotychczasowych zakupach, które nie zostały potwierdzone. Zalecamy jak najszybsze potwierdzenie zakupów, aby użytkownicy mogli uprawnienia są prawidłowo odzwierciedlone w aplikacji.
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}`);
}
Testowanie integracji
Na deweloperskim urządzeniu z Androidem
Interfejs Digital Goods API można włączyć na urządzeniu z Androidem, na którym tworzysz:
- Upewnij się, że używasz Androida w wersji 9 lub nowszej z włączonym trybem programisty.
- Zainstaluj Chrome 101 lub nowszą wersję.
- Włącz te flagi w Chrome, otwierając
chrome://flags
i wyszukując flaga po nazwie:#enable-debug-for-store-billing
- Upewnij się, że witryna jest hostowana przy użyciu protokołu https. Użycie protokołu http spowoduje, że interfejs API zmieni się na
undefined
Na urządzeniu z ChromeOS
Interfejs Digital Goods API będzie dostępny w stabilnej wersji ChromeOS od wersji 89. W w międzyczasie możesz przetestować interfejs Digital Goods API:
- Zainstaluj aplikację ze Sklepu Play na urządzeniu.
- Upewnij się, że witryna jest hostowana przy użyciu protokołu https. Użycie protokołu http spowoduje, że interfejs API zmieni się na
undefined
Użytkownikom testowym i zespołom kontroli jakości
W Sklepie Play dostępne są opcje testowania, w tym konta testowe użytkowników i testowe kody SKU. Więcej informacji znajdziesz w dokumentacji dotyczącej testów płatności w Google Play.
Co dalej?
Jak wspomnieliśmy w tym dokumencie, interfejs Play Billing API zawiera komponenty po stronie klienta, które są zarządzane przy użyciu interfejsu Digital Goods API i komponentów po stronie serwera.
- Zobacz próbkę Petera Conna na stronie https://github.com/PEConn/beer
- Zapoznaj się z dokumentacją Google Play dotyczącą weryfikacji zakupów.
- Rozważ użycie jednej z bibliotek klienta interfejsu Google Play Developer API, które są dostępne w wielu językach.
- Jeśli implementujesz w aplikacji model subskrypcji, zapoznaj się z Dokumentacja subskrypcji w Płatnościach w Play
- Zaimplementuj powiadomienia dla deweloperów w czasie rzeczywistym (RTDN) i subskrybuj powiadomienia, aby jest powiadamiany o zmianie stanu subskrypcji, zamiast odpytywać ich stan Graj.
- Aby zapobiec duplikowaniu subskrypcji, zastosuj metodę
linkedPurchaseToken
. Przeczytaj tego posta na blogu w: jak go wdrożyć.