В этом руководстве описывается, как интегрировать API для предоставления возможности выбора альтернативного способа оплаты (т.е. без выбора пользователя) в соответствующих приложениях. Для получения дополнительной информации об этих программах, включая требования к участию и географический охват, см. раздел «Об альтернативном способе оплаты» .
Настройка библиотеки Play Billing
Добавьте зависимость Play Billing Library в ваше Android-приложение. Для использования альтернативных API для оплаты вам потребуется версия 6.1 или выше.
Подключиться к Google Play
Первые шаги в процессе интеграции аналогичны описанным в руководстве по интеграции Google Play Billing , с некоторыми изменениями при инициализации вашего BillingClient :
- Для указания того, что ваше приложение использует только альтернативную систему выставления счетов, необходимо вызвать новый метод:
enableAlternativeBillingOnly.
В следующем примере показана инициализация объекта BillingClient с учетом этих изменений:
Котлин
var billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build()
Java
private BillingClient billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build();
После инициализации BillingClient необходимо установить соединение с Google Play, как описано в руководстве по интеграции.
Проверка наличия мест
Ваше приложение должно подтвердить доступность альтернативного способа оплаты, вызвав метод isAlternativeBillingOnlyAvailableAsync .
Этот API вернет BillingResponseCode.OK , если доступна только альтернативная оплата. Подробную информацию о том, как ваше приложение должно реагировать на другие коды ответа, см. в разделе обработки ответов .
Котлин
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.
}
});
Информационный диалог для пользователей
Для интеграции только с альтернативной оплатой ваше приложение должно отображать информационный экран, который помогает пользователям понять, что оплата не будет управляться Google Play. Информационный экран должен отображаться пользователям путем вызова API showAlternativeBillingOnlyInformationDialog перед каждым запуском процесса альтернативной оплаты. Если пользователь уже подтвердил получение диалогового окна, использование этого API обычно не приводит к повторному отображению диалогового окна. В некоторых случаях диалоговое окно может быть показано пользователю повторно, например, если пользователь очистил кэш на своем устройстве.
Котлин
// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity : Activity = ...;
val listener : AlternativeBillingOnlyInformationDialogListener =
AlternativeBillingOnlyInformationDialogListener {
override fun onAlternativeBillingOnlyInformationDialogResponse(
billingResult: 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);
Если этот метод возвращает BillingResponseCode.OK , то ваше приложение может продолжить транзакцию. В случае BillingResponseCode.USER_CANCELED ваше приложение должно вызвать showAlternativeBillingOnlyInformationDialog, чтобы снова показать диалоговое окно пользователю. Для других кодов ответа см. раздел обработки ответов .
Передача данных о транзакциях в Google Play
Все транзакции, совершенные через альтернативную платежную систему , должны быть переданы в Google Play путем вызова API разработчика Google Play из вашей административной панели в течение 24 часов , с предоставлением externalTransactionToken , который получается с помощью API, описанного ниже. Новый externalTransactionToken должен генерироваться для каждой разовой покупки, каждой новой подписки и для любого повышения/понижения уровня существующей подписки. Чтобы узнать, как передать транзакцию после получения externalTransactionToken , см. руководство по интеграции с административной панелью .
Котлин
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.
}
});
Обработка ответа
Указанные выше методы isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog() и createAlternativeBillingOnlyReportingDetailsAsync() могут возвращать ответы, отличные от BillingResponseCode.OK, в случае ошибок. Рекомендуемый способ обработки ошибок описан ниже:
-
ERROR: Это внутренняя ошибка. Не продолжайте транзакцию. Повторите попытку, вызвав методshowAlternativeBillingOnlyInformationDialog(), чтобы отобразить информационное диалоговое окно пользователю при следующей попытке совершить покупку. -
FEATURE_NOT_SUPPORTED: Альтернативные API для оплаты не поддерживаются Play Store на данном устройстве. Не продолжайте транзакцию. -
USER_CANCELED: Не продолжайте транзакцию. ВызовитеshowAlternativeBillingOnlyInformationDialog()еще раз, чтобы отобразить информационное диалоговое окно пользователю при следующей попытке совершить покупку. -
BILLING_UNAVAILABLE: Данная транзакция не подходит для альтернативного способа оплаты и поэтому не должна быть выполнена в рамках этой программы. Это может быть связано либо с тем, что пользователь находится за пределами страны, участвующей в программе, либо с тем, что его учетная запись не была успешно зарегистрирована в программе. В последнем случае проверьте статус регистрации в консоли разработчика Play. -
DEVELOPER_ERROR: В запросе произошла ошибка. Используйте отладочное сообщение, чтобы выявить и исправить ошибку, прежде чем продолжить. -
NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: Это временные ошибки, которые следует повторить. В случаеSERVICE_DISCONNECTEDперед повторной попыткой восстановите соединение с Google Play.
Протестируйте альтернативный способ выставления счетов.
Для проверки интеграции альтернативных способов оплаты следует использовать тестовые учетные записи лицензий. Счета за транзакции, инициированные учетными записями тестовых учетных записей лицензий, выставляться не будут. Дополнительную информацию о настройке тестовых учетных записей лицензий см. в разделе «Тестирование внутриприложенийных платежей с использованием лицензирования приложений» .
Следующие шаги
После завершения интеграции внутри приложения вы готовы интегрировать свой бэкэнд .