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

В этом документе рассказывается, как интегрировать API библиотеки Play Платежей, чтобы предлагать ссылки на внешний контент в подходящих приложениях. В частности, вы можете направлять пользователей из США за пределы приложения, опубликованного в Google Play, чтобы предлагать им цифровой контент и скачивание приложений. Подробнее о требованиях программы…

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

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

Инициализация клиента платежей

Чтобы инициализировать клиентскую библиотеку, выполните те же действия, что и при инициализации BillingClient, но с учетом следующих изменений:

  • Не включайте PurchasesUpdatedListener – этот прослушиватель не нужен для ссылок на внешний контент.
  • Вызовите enableBillingProgram() с BillingProgram.EXTERNAL_CONTENT_LINK, чтобы указать, что в приложении используются ссылки на внешний контент.

В примере ниже показано, как инициализировать BillingClient с этими изменениями:

Kotlin

Java

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
    .build();

Как подключить Google Play

После инициализации BillingClient подключитесь к Google Play, как описано в разделе Подключение к Google Play.

Как проверить, соответствует ли пользователь требованиям

После подключения к Google Play вам нужно проверить, соответствует ли пользователь требованиям программы ссылок на внешний контент. Для этого вызовите метод isBillingProgramAvailableAsync(). Этот метод возвращает значение BillingResponseCode.OK, если пользователь соответствует требованиям программы ссылок на внешний контент. В примере ниже показано, как проверить, может ли пользователь переходить по ссылкам на внешний контент:

Kotlin

Java

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_CONTENT_LINK,
  new BillingProgramAvailabilityListener() {
    @Override
    public void onBillingProgramAvailabilityResponse(
      int billingProgram, BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external content links unavailable, etc.
            return;
        }

        // External content links are available. Prepare an external
        // transaction token.
      }

    });

Подробнее о том, как ваше приложение должно реагировать на другие коды ответа, рассказывается в разделе Обработка ответов. Если вы используете расширения Kotlin, то можете использовать сопрограммы Kotlin, чтобы не определять отдельный прослушиватель.

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

Затем вам нужно сгенерировать токен внешней транзакции с помощью библиотеки платежной системы Google Play. Каждый раз, когда пользователь переходит на внешний сайт через API внешних ссылок, необходимо генерировать новый токен внешней транзакции. Для этого можно вызвать API createBillingProgramReportingDetailsAsync. Токен должен быть сгенерирован непосредственно перед переходом пользователя на внешний сайт.

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

Kotlin

Java

BillingProgramReportingDetailsParams params =
    BillingProgramReportingDetailsParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
        .build();

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  new BillingProgramReportingDetailsListener() {
    @Override
    public void onCreateBillingProgramReportingDetailsResponse(
      BillingResult billingResult,
      @Nullable BillingProgramReportingDetails
        billingProgramReportingDetails) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        String transactionToken =
          billingProgramReportingDetails.getExternalTransactionToken();

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

Если вы используете расширения Kotlin, то можете использовать сопрограммы Kotlin, чтобы не определять отдельный прослушиватель.

Запустить внешнюю ссылку

Когда токен внешней транзакции будет готов, пользователя можно перенаправить за пределы приложения, чтобы показать ему предложение цифрового контента или страницу скачивания приложения. Для этого нужно вызвать метод launchExternalLink. При вызове этого API Google Play может показывать пользователю дополнительные диалоговые окна с информацией в зависимости от его настроек.

При вызове метода launchExternalLink сведения о внешней ссылке должны быть указаны с помощью LaunchExternalLinkParams. Этот класс содержит следующие параметры:

  • URI ссылки – ссылка на внешний сайт, на котором предлагается цифровой контент или скачивание приложения. Если вы хотите показывать ссылки на скачивание приложений, их нужно зарегистрировать и одобрить в Play Console.
  • Тип ссылки – тип контента, предлагаемого пользователю.
  • Режим запуска – определяет, как запускается ссылка. Если вы хотите увеличить число скачиваний приложения, укажите значение LAUNCH_IN_EXTERNAL_BROWSER_OR_APP.
  • Billing Program (Программа оплаты) – установите значение BillingProgram.EXTERNAL_CONTENT_LINK.

Kotlin

Java

LaunchExternalLinkParams params =
  LaunchExternalLinkParams.newBuilder()
    .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
    .setLinkUri(Uri.parse("https://www.myapprovedsite.com"))
    .setLinkType(LaunchExternalLinkParams.LinkType.LINK_TO_APP_DOWNLOAD)
    .setLaunchMode(
      LaunchExternalLinkParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
    .build()

LaunchExternalLinkResponseListener listener =
  new LaunchExternalLinkResponseListener() {
    @Override
    public void onLaunchExternalLinkResponse(BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        // If Launch Mode was set to LAUNCH_IN_EXTERNAL_BROWSER_OR_APP, the
        // user was directed outside of the app by Play. This does not give
        // any information on the user's actions during the link out, such
        // as if a transaction was completed.

        // If Launch Mode was set to CALLER_WILL_LAUNCH_LINK, then your app
        // may proceed to direct the user to the external website.
    }
  }

billingClient.launchExternalLink(activity, params, listener);

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

Если возникает ошибка, методы isBillingProgramAvailableAsync(), createBillingProgramReportingDetailsAsync() и onLaunchExternalLinkResponse() могут возвращать BillingResponseCode, отличное от BillingResponseCode.OK. Рекомендуем обрабатывать эти коды ответов следующим образом:

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

Как проверить ссылки на внешний контент

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

Дальнейшие действия

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