Руководство по интеграции в приложение только для альтернативных платежей

В этом руководстве описывается, как интегрировать API-интерфейсы, чтобы предлагать только альтернативное выставление счетов (т. е. без выбора пользователя) в соответствующих приложениях. Дополнительную информацию об этих программах, в том числе о требованиях к участию и географическом охвате, см. в разделе «Об альтернативном выставлении счетов» .

Настройка платежной библиотеки Play

Добавьте зависимость библиотеки платежей Play в свое приложение для Android. Чтобы использовать альтернативные API биллинга, вам необходимо использовать версию 6.1 или выше.

Подключитесь к Google Play

Первые шаги в процессе интеграции такие же, как описано в руководстве по интеграции Google Play Billing , с некоторыми изменениями при инициализации BillingClient :

  • Вам нужно вызвать новый метод, чтобы указать, что ваше приложение использует только альтернативную систему выставления счетов: enableAlternativeBillingOnly .

В следующем примере демонстрируется инициализация BillingClient с этими изменениями:

Котлин


var billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build()

Ява

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.
        }
    });

Ява


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)

Ява


// 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.
        }
    });

Ява


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 на текущем устройстве. Приступите к обработке транзакции через альтернативную платежную систему. О транзакции не нужно сообщать в Google, как и о любых продлениях затронутых подписок.
  • USER_CANCELED : не продолжать транзакцию. Вызовите showAlternativeBillingOnlyInformationDialog() еще раз, чтобы отобразить диалоговое окно с информацией для пользователя в следующий раз, когда пользователь попытается совершить покупку.
  • BILLING_UNAVAILABLE : транзакция не подлежит только альтернативному выставлению счетов и, следовательно, не должна выполняться в рамках этой программы. Это связано либо с тем, что пользователь не находится в стране, подходящей для участия в этой программе, либо с тем, что ваша учетная запись не была успешно зарегистрирована в программе. В последнем случае проверьте статус регистрации в консоли разработчика Play.
  • DEVELOPER_ERROR : в запросе произошла ошибка. Прежде чем продолжить, используйте сообщение отладки, чтобы определить и исправить ошибку.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE : это временные ошибки, которые следует повторить. В случае SERVICE_DISCONNECTED перед повторной попыткой повторно установите соединение с Google Play.

Протестируйте альтернативный способ оплаты

Тестеры лицензий следует использовать для проверки альтернативной интеграции биллинга. Вам не будет выставлен счет за транзакции, инициированные учетными записями тестировщиков лицензий. Дополнительные сведения о настройке тестеров лицензий см. в разделе Проверка выставления счетов в приложении с помощью лицензирования приложений .

Следующие шаги

Завершив интеграцию в приложении, вы готовы интегрировать свою серверную часть .