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

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

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

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

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

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

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

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

Котлин

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

Ява

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableExternalOffer()
    .build();

После инициализации BillingClient вам необходимо установить соединение с Google Play , как описано в руководстве по интеграции.

Проверить наличие

Ваше приложение должно подтвердить доступность внешних предложений, вызвав isExternalOfferAvailableAsync .

Этот API возвращает BillingResponseCode.OK , если доступны внешние предложения. Подробную информацию о том, как ваше приложение должно реагировать на другие коды ответа, см. в разделе «Обработка ответов».

Котлин


billingClient.isExternalOfferAvailableAsync(
  object : ExternalOfferAvailabilityListener {
    override fun onExternalOfferAvailabilityResponse(
      billingResult: BillingResult) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external offers unavailable, etc.
            return
        }

        // External offers are available. Continue with steps in the
        // guide.
})

Ява


billingClient.isExternalOfferAvailableAsync(
  new ExternalOfferAvailabilityListener() {
    @Override
    public void onExternalOfferAvailabilityResponse(
      BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external offers being unavailable, etc.
            return;
        }
        // External offers are available. Continue with steps in the
        // guide.
      }

});

Подготовьте токен внешней транзакции

Чтобы сообщить о внешней транзакции в Google Play, у вас должен быть токен внешней транзакции, сгенерированный из библиотеки платежей Play. Новый токен внешней транзакции должен создаваться каждый раз, когда пользователь посещает внешний веб-сайт через API внешних предложений. Это можно сделать, вызвав API createExternalOfferReportingDetailsAsync . Этот токен должен быть сгенерирован непосредственно перед тем, как пользователь будет направлен за пределы приложения. Его никогда не следует кэшировать, а новый должен создаваться каждый раз, когда пользователь выходит за пределы приложения.

Котлин


billingClient.createExternalOfferReportingDetailsAsync(
  object : ExternalOfferReportingDetailsListener {
    override fun onExternalOfferReportingDetailsResponse(
      billingResult: BillingResult,
      externalOfferReportingDetails: ExternalOfferReportingDetails?) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return
        }
        val externalTransactionToken =
            externalOfferReportingDetails?.externalTransactionToken
        // Persist the transaction token locally. Pass it to the external
        // website when showExternalOfferInformationDialog is called.
    }
})

Ява


billingClient.createExternalOfferReportingDetailsAsync(
  new ExternalOfferReportingDetailsListener() {
    @Override
    public void onExternalOfferReportingDetailsResponse(
      BillingResult billingResult,
      @Nullable ExternalOfferReportingDetails
        externalOfferReportingDetails) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        String transactionToken =
          externalOfferReportingDetails.getExternalTransactionToken();

        // Persist the external transaction token locally. Pass it to the
        // external website when showExternalOfferInformationDialog is
        // called.
      }
});

Информационный диалог для пользователей

Для интеграции с внешними предложениями ваше подходящее приложение должно отображать информационный экран, который поможет пользователям понять, что их собираются перенаправить за пределы приложения на внешний веб-сайт. Информационный экран необходимо показывать пользователям путем вызова API showExternalOfferInformationDialog перед каждой ссылкой на внешнее предложение.

Котлин


// An activity reference from which the external offers information dialog
// will be launched.
val activity : Activity = ...;

val listener : ExternalOfferInformationDialogListener =
  ExternalOfferInformationDialogListener {
      override fun onExternalOfferInformationDialogResponse(
        billingResult: BillingResult){
        // Check billingResult
    }
}

val billingResult = billingClient.showExternalOfferInformationDialog(
  activity, listener)

Ява


// An activity reference from which the external offers information dialog
// will be launched.
Activity activity = ...;

ExternalOfferInformationDialogListener listener =
  new ExternalOfferInformationDialogListener() {
    @Override
    public void onExternalOfferInformationDialogResponse(
      BillingResult billingResult) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
          // Handle failures such as retrying due to network errors.
        }
        // Open the external website, passing along the external transaction
        // token as a URL parameter. If the user purchases an item, be sure
        // to report the transaction to Google Play.
      }
}

BillingResult billingResult =
  billingClient.showExternalOfferInformationDialog(activity, listener);

Если этот метод возвращает BillingResponseCode.OK , ваше приложение может перенаправить пользователя на внешний веб-сайт. Если метод возвращает BillingResponseCode.USER_CANCELED , ваше приложение не должно продолжать открывать веб-сайт.

Сообщайте о транзакциях в Google Play

Обо всех внешних транзакциях необходимо сообщать в Google Play, вызывая API разработчика Google Play со своей серверной части. О внешних транзакциях необходимо сообщать при предоставлении externalTransactionToken полученного с помощью API createExternalOfferReportingDetailsAsync . Если пользователь совершает несколько покупок, вы можете использовать один и тот же externalTransactionToken для отчета о каждой покупке. Чтобы узнать, как сообщить о транзакции, см. руководство по интеграции с серверной частью .

Обработка ответов

При возникновении ошибки методы isExternalOfferAvailableAsync , createExternalOfferReportingDetailsAsync и showExternalOfferInformationDialog могут возвращать ответы, отличные от BillingResponseCode.OK . Рассмотрите возможность обработки этих кодов ответа следующим образом:

  • ERROR : Это внутренняя ошибка. Не продолжайте транзакцию или открытие внешнего веб-сайта. Повторите попытку, вызвав showExternalOfferInformationDialog() , чтобы отобразить диалоговое окно с информацией для пользователя в следующий раз, когда вы попытаетесь направить пользователя за пределы приложения.
  • FEATURE_NOT_SUPPORTED : API внешних предложений не поддерживаются Play Store на текущем устройстве. Не продолжайте транзакцию или открытие внешнего веб-сайта.
  • USER_CANCELED : не открывайте внешний веб-сайт. Вызовите showExternalOfferInformationDialog() еще раз, чтобы отобразить диалоговое окно с информацией для пользователя в следующий раз, когда вы попытаетесь направить пользователя за пределы приложения.
  • BILLING_UNAVAILABLE : транзакция не подлежит участию во внешних предложениях и поэтому не должна проводиться в рамках этой программы. Это связано либо с тем, что пользователь не находится в стране, подходящей для участия в этой программе, либо с тем, что ваша учетная запись не была успешно зарегистрирована в программе. В последнем случае проверьте статус регистрации в консоли разработчика Play.
  • DEVELOPER_ERROR : в запросе произошла ошибка. Прежде чем продолжить, используйте сообщение отладки, чтобы выявить и исправить ошибку.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE : это временные ошибки, которые следует обрабатывать с помощью соответствующей политики повторных попыток. В случае SERVICE_DISCONNECTED перед повторной попыткой повторно установите соединение с Google Play.

Тестируйте внешние предложения

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

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

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