Data publikacji: 2 grudnia 2020 r.
Poza możliwością sprzedaży produktów cyfrowych i subskrypcji w aplikacji w Sklepie Play płatności w Google Play zapewniają też narzędzia do zarządzania katalogiem, cenami i subskrypcjami, przydatne raporty oraz proces płatności w Sklepie Play, który jest już znany użytkownikom. Jest to wymagane w przypadku aplikacji opublikowanych w Sklepie Play, które sprzedają produkty cyfrowe.
Interfejs API Płatności w Google Play ma własną terminologię i obsługuje komponenty klienta i back-endu. Ta sekcja obejmuje tylko niewielką część interfejsu API, która dotyczy korzystania z interfejsu API cyfrowych towarów i zaufanej aktywności w internecie. Zanim zintegrujesz tę usługę z wersją produkcyjną aplikacji, przeczytaj dokumentację płatności w Google Play i zapoznaj się z jej koncepcją.
Podstawowy schemat
Aby udostępniać treści cyfrowe w Sklepie Play, skonfiguruj katalog w Sklepie Play i połącz Sklep Play jako formę płatności w Twojej aplikacji internetowej.
W interfejsie Sklepu Play możesz to zrobić w ten sposób:
- W menu Konsoli Play kliknij Produkty. Wyświetlanie dotychczasowych produktów i subskrypcji w aplikacji.
- Aby dodać nowy produkt, kliknij Utwórz produkt.
- Dodaj identyfikator produktu, nazwę, opis i cenę. Utwórz znaczące i łatwe do zapamiętania identyfikatory produktów, ponieważ będą Ci one potrzebne później. Po utworzeniu identyfikatorów nie można ich zmienić.
- Jeśli tworzysz subskrypcję, musisz też określić okres rozliczeniowy. Możesz wymienić korzyści związane z subskrypcją i dodać funkcje takie jak bezpłatne okresy próbne, ceny promocyjne, okres prolongaty i opcję ponownej subskrypcji.
- Kliknij Aktywuj, aby udostępnić usługę.
Możesz też dodać produkty za pomocą interfejsu Play Developer API.
Po skonfigurowaniu katalogu należy skonfigurować proces płatności w PWA. Użyj kombinacji interfejsów Digital Goods API i Payment Request API.
Pobieranie ceny produktu za pomocą interfejsu Digital Goods API
Jeśli korzystasz z Płatności w Google Play, sprawdź, czy cena wyświetlana użytkownikom jest zgodna z ceną w informacjach o aplikacji. Ręczne utrzymywanie zgodności tych cen byłoby niemożliwe, dlatego interfejs API cyfrowych towarów umożliwia aplikacji internetowej wysyłanie zapytań o ceny do dostawcy płatności:
// The SKU for the product, as defined in the Play Store interface
async function populatePrice(sku) {
try {
// Check if the Digital Goods API is supported by the browser.
if (window.getDigitalGoodsService) {
// The Digital Goods API can be supported by other Payments provider.
// In this case, we're retrieving the Google Play Billing provider.
const service =
await window.getDigitalGoodsService("https://play.google.com/billing");
// Fetch product details using the `getDetails()` method.
const details = await service.getDetails([sku]);
if (details.length === 0) {
console.log(`Could not get SKU: "${sku}".`);
return false;
}
// The details contain both the price and the currenncy.
item = details[0];
const value = item.price.value;
const currency = item.price.currency;
const formattedPrice = new Intl.NumberFormat(navigator.language, {
style: 'currency', currency: currency }).format(value);
// Display the price to the user.
document.getElementById("price").innerHTML = formattedPrice;
} else {
console.error("Could not get price for SKU \"" + sku + "\".");
}
} catch (error) {
console.log(error);
}
return false;
}
Obsługę interfejsu Digital Goods API możesz wykryć, sprawdzając, czy obiekt getDigitalGoodsService()
jest dostępny w obiekcie window
.
Następnie wywołaj window.getDigitalGoodsService()
, podając jako parametr identyfikator płatności Google Play.
Zwraca to instancję usługi Rozliczenia w Google Play. Inni dostawcy mogą implementować obsługę interfejsu API cyfrowych towarów i mieć inne identyfikatory.
Na koniec wywołaj metodę getDetails()
obiektu Płatności Google Play, przekazując jako parametr kod SKU produktu. Metoda zwraca obiekt szczegółów zawierający cenę i walutę produktu, które można wyświetlić użytkownikowi.
Rozpoczęcie procesu zakupu
Interfejs Payment Request API umożliwia przeprowadzanie procesów zakupu w internecie i jest też używany do integracji z systemem płatności Google Play. Jeśli nie znasz jeszcze Payment Request API, zapoznaj się z artykułem Jak działa Payment Request API.
Aby używać interfejsu API z obsługą płatności Google Play, musisz dodać instrument płatności, który ma obsługiwaną metodę o nazwie https://play.google.com/billing
.
Dodaj kod SKU jako część danych instrumentu:
const supportedInstruments = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku
}
}];
Następnie utwórz obiekt PaymentRequest
w zwykły sposób i użyj interfejsu API w zwykły sposób.
const request = new PaymentRequest(supportedInstruments, details);
Potwierdź zakup
Po zakończeniu transakcji użyj interfejsu Digital Goods API, aby potwierdzić płatność. Obiekt odpowiedzi z PaymentRequest
zawiera token, którego możesz użyć do potwierdzenia transakcji:
const response = await request.show();
const token = response.details.token;
const service = await window.getDigitalGoodsService("https://play.google.com/billing");
await service.acknowledge(token, 'onetime');
Interfejsy Digital Goods API i Payment Request API nie mają informacji o tożsamości użytkownika. W efekcie musisz powiązać zakup z użytkownikiem na zapleczu i zadbać o to, aby miał dostęp do zakupionych produktów. Podczas kojarzenia zakupu z użytkownikiem zapisz token zakupu, ponieważ może być on potrzebny do sprawdzenia, czy zakup został anulowany lub zwrócony, czy też subskrypcja jest nadal aktywna. Zapoznaj się z interfejsem Real Time Developer Notifications API i Google Play Developer API, ponieważ udostępniają one punkty końcowe do obsługi takich sytuacji w Twoim backendzie.
Sprawdź, czy masz już uprawnienia
Użytkownik mógł wykorzystać kod promocyjny lub mieć już subskrypcję Twojego produktu. Aby sprawdzić, czy użytkownik ma odpowiednie uprawnienia, możesz wywołać polecenie listPurchases()
w usłudze cyfrowych towarów. Zwraca to wszystkie zakupy dokonane przez klienta w Twojej aplikacji. Jest to też miejsce, w którym można potwierdzić nieuwzględnione zakupy, aby mieć pewność, że użytkownik prawidłowo wykorzysta swoje uprawnienia.
const purchases = await itemService.listPurchases();
for (p of purchases) {
if (!p.acknowledged) {
await itemService.acknowledge(p.purchaseToken, 'onetime');
}
}