Z tego przewodnika dowiesz się, jak zintegrować interfejsy API, aby oferować rozliczenia alternatywne (tj. bez opcji wyboru przez użytkownika) w kwalifikujących się aplikacjach. Więcej informacji o tych programach w tym o wymaganiach kwalifikacyjnych i zasięgu geograficznym, znajdziesz w artykule Rozliczenia alternatywne.
Konfigurowanie Biblioteki płatności w Play
Dodaj zależność Biblioteki płatności w Play do swojej aplikacji na Androida. Aby korzystać z interfejsów API do rozliczeń alternatywnych, musisz używać wersji 6.1 lub nowszej.
Połącz z Google Play
Pierwsze kroki procesu integracji są takie same jak te opisane w przewodniku po integracji z Płatnościami w Google Play. W przypadku inicjowania elementu BillingClient należy jednak wprowadzić kilka zmian:
- Musisz wywołać nową metodę, aby wskazać, że Twoja aplikacja używa tylko an
alternatywnego systemu rozliczeniowego:
enableAlternativeBillingOnly.
Poniższy przykład pokazuje, jak zainicjować element BillingClient z tymi zmianami:
Kotlin
var billingClient = BillingClient.newBuilder(context) .enableAlternativeBillingOnly() .build()
Java
private BillingClient billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build();
Po zainicjowaniu elementu BillingClient musisz nawiązać połączenie z
Google Play zgodnie z opisem w przewodniku po integracji.
Sprawdzanie dostępności
Twoja aplikacja powinna potwierdzić, że dostępne są tylko rozliczenia alternatywne, wywołując metodę
isAlternativeBillingOnlyAvailableAsync.
Jeśli dostępne są tylko rozliczenia alternatywne, ten interfejs API zwróci wartość BillingResponseCode.OK, jeśli jest dostępny. Szczegółowe informacje o tym, jak aplikacja powinna reagować na inne kody odpowiedzi, znajdziesz w sekcji Obsługa odpowiedzi.
Kotlin
billingClient.isAlternativeBillingOnlyAvailableAsync(object : AlternativeBillingOnlyAvailabilityListener { override fun onAlternativeBillingOnlyAvailabilityResponse( billingResult: BillingResult ) { if (billingResult.responseCode != BillingResponseCode.OK) { // Handle failures such as retrying due to network errors, // handling alternative billing only being unavailable, etc. return } // Alternative billing only is available. Continue with steps in // the guide. } })
Java
billingClient.isAlternativeBillingOnlyAvailable(
new AlternativeBillingOnlyAvailabilityListener() {
@Override
public void onAlternativeBillingOnlyAvailabilityResponse(
BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling alternative billing only being unavailable,
// etc.
return;
}
// Alternative billing only is available. Continue with steps in
// the guide.
}
});
Okno informacyjne dla użytkowników
Aby zintegrować się z rozliczeniami alternatywnymi, kwalifikująca się aplikacja musi wyświetlać ekran informacyjny, który pomoże użytkownikom zrozumieć, że rozliczenia nie będą zarządzane przez Google Play. Ekran informacyjny musi być wyświetlany użytkownikom przez wywołanie interfejsu API
showAlternativeBillingOnlyInformationDialog przed każdym rozpoczęciem procesu
rozliczeń alternatywnych. Jeśli użytkownik potwierdził już okno, użycie tego interfejsu API zwykle nie spowoduje ponownego wyświetlenia okna. W niektórych sytuacjach okno może być ponownie wyświetlane użytkownikowi, np. jeśli wyczyści on pamięć podręczną na swoim urządzeniu.
Kotlin
// An activity reference from which the alternative billing only information // dialog will be launched. val activity: Activity = this.activity val listener: AlternativeBillingOnlyInformationDialogListener = AlternativeBillingOnlyInformationDialogListener { billingResult -> // check billingResult } val billingResult = billingClient.showAlternativeBillingOnlyInformationDialog( activity, listener )
Java
// An activity reference from which the alternative billing only information
// dialog will be launched.
Activity activity = ...;
AlternativeBillingOnlyInformationDialogListener listener =
new AlternativeBillingOnlyInformationDialogListener() {
@Override
public void onAlternativeBillingOnlyInformationDialogResponse(
BillingResult billingResult) {
// check billingResult
}
};
BillingResult billingResult =
billingClient.showAlternativeBillingOnlyInformationDialog(activity,
listener);
Jeśli ta metoda zwróci wartość BillingResponseCode.OK, Twoja aplikacja może kontynuować transakcję. W przypadku BillingResponseCode.USER_CANCELED aplikacja powinna wywołać metodę showAlternativeBillingOnlyInformationDialog, aby ponownie wyświetlić użytkownikowi okno. Informacje o innych kodach odpowiedzi znajdziesz w sekcji Obsługa odpowiedzi sekcja.
Zgłaszanie transakcji do Google Play
Wszystkie transakcje dokonywane za pomocą alternatywnego systemu rozliczeniowego muszą być zgłaszane
do Google Play przez wywołanie interfejsu Google Play Developer API z backendu w ciągu
24 godzin. Należy podać externalTransactionToken, który jest uzyskiwany za pomocą
interfejsu API opisanego poniżej. Nowy token externalTransactionToken należy wygenerować dla każdego zakupu jednorazowego, każdej nowej subskrypcji oraz każdej zmiany na wyższą lub niższą wersję istniejącej subskrypcji. Aby dowiedzieć się, jak zgłosić transakcję po uzyskaniu tokena
externalTransactionToken, zapoznaj się z przewodnikiem po integracji z backendem.
Kotlin
billingClient.createAlternativeBillingOnlyReportingDetailsAsync(object : AlternativeBillingOnlyReportingDetailsListener { override fun onAlternativeBillingOnlyTokenResponse( billingResult: BillingResult, alternativeBillingOnlyReportingDetails: AlternativeBillingOnlyReportingDetails? ) { if (billingResult.responseCode != BillingResponseCode.OK) { // Handle failures such as retrying due to network errors. return } val externalTransactionToken = alternativeBillingOnlyReportingDetails?.externalTransactionToken // Send transaction token to backend and report to Google Play. } })
Java
billingClient.createAlternativeBillingOnlyReportingDetailsAsync(
new AlternativeBillingOnlyReportingDetailsListener() {
@Override
public void onAlternativeBillingOnlyTokenResponse(
BillingResult billingResult,
@Nullable AlternativeBillingOnlyReportingDetails
alternativeBillingOnlyReportingDetails) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
String transactionToken =
alternativeBillingOnlyReportingDetails
.getExternalTransactionToken();
// Send transaction token to backend and report to Google Play.
}
});
Obsługa odpowiedzi
W przypadku błędów powyższe metody isAlternativeBillingOnlyAvailableAsync(),
showAlternativeBillingOnlyInformationDialog() i
createAlternativeBillingOnlyReportingDetailsAsync() mogą zwracać
odpowiedzi inne niż BillingResponseCode.OK. Zalecany sposób obsługi błędów opisujemy poniżej:
ERROR: to błąd wewnętrzny. Nie kontynuuj transakcji. Spróbuj ponownie, wywołując metodęshowAlternativeBillingOnlyInformationDialog(), aby wyświetlić użytkownikowi okno informacyjne przy następnej próbie zakupu.FEATURE_NOT_SUPPORTED: interfejsy API do rozliczeń alternatywnych nie są obsługiwane przez Sklep Play na bieżącym urządzeniu. Nie kontynuuj transakcji.USER_CANCELED: nie kontynuuj transakcji. Ponownie wywołaj metodęshowAlternativeBillingOnlyInformationDialog(), aby wyświetlić użytkownikowi okno informacyjne przy następnej próbie zakupu.BILLING_UNAVAILABLE: transakcja nie kwalifikuje się do rozliczeń alternatywnych i dlatego nie powinna być realizowana w ramach tego programu. Może to być spowodowane tym, że użytkownik nie mieszka w kraju objętym tym programem lub Twoje konto nie zostało zarejestrowane w programie. Jeśli to drugie, sprawdź stan rejestracji w Konsoli Play.DEVELOPER_ERROR: wystąpił błąd w żądaniu. Przed kontynuowaniem zidentyfikuj i popraw błąd, korzystając z komunikatu debugowania.NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: są to błędy przejściowe, które należy ponowić. W przypadku błęduSERVICE_DISCONNECTEDprzed ponowieniem próby nawiąż ponownie połączenie z Google Play.
Testowanie rozliczeń alternatywnych
Do testowania integracji rozliczeń alternatywnych należy używać testerów licencji. Nie otrzymasz faktury za transakcje zainicjowane przez konta testerów licencji. Więcej informacji o konfigurowaniu testerów licencji znajdziesz w artykule Testowanie rozliczeń w aplikacji za pomocą licencjonowania.
Dalsze kroki
Gdy skończysz integrację w aplikacji, możesz zintegrować backend.