Поддержка активности для полноэкранной рекламы

Среда выполнения SDK накладывает ограничения на то, как SDK могут запускать новые действия. Это создает проблему для полноэкранных рекламных форматов, которые обычно полагаются на запуск отдельного действия для расширения контроля и улучшения пользовательского опыта. Для решения этой проблемы среда выполнения SDK вводит новый механизм для изолированных действий.

SDK, загружаемые в среду выполнения SDK, не могут напрямую определять теги <activity> в своем манифесте или запускать собственные действия. Вместо этого вводится новое действие намерения, START_SANDBOXED_ACTIVITY .

Хотя SDK также ограничены в возможности запуска интентов с этим действием, они могут запросить у клиентского приложения инициирование этого интента. Затем система создает определяемую платформой активность и передает ее SDK. Эта активность будет выполняться в том же процессе, что и SDK.

Затем SDK может использовать эту информацию для реализации и управления полноэкранным отображением рекламы.

Предоставляемая платформой активность представляет собой стандартный объект android.app.Activity , запускаемый в рамках задачи клиентского приложения.

Создание действий в среде выполнения SDK

Для создания действий у вас есть два основных метода: использование упрощенных библиотек действий Jetpack или прямое взаимодействие с API платформы .

Мы рекомендуем использовать библиотеки Activity, поскольку они упрощают создание Activity, абстрагируясь от лежащей в их основе сложности.

Библиотеки заданий

Библиотеки заданий предоставляют ряд преимуществ:

  • Абстрагируйте внутренние детали регистрации обработчиков действий и обмена их идентификаторами с клиентскими приложениями.
  • Предоставляет разработчикам приложений больший контроль над тем, как SDK создают Activity в их приложениях, позволяя им устанавливать условия (предикаты), которые должны быть выполнены.
  • Создайте единый способ для SDK определять API, запускающие действия.

Существует три библиотеки действий: основная, клиентская и библиотека поставщика.

  • Основная библиотека предоставляет интерфейсы, используемые клиентскими приложениями и библиотеками-поставщиками.
  • Библиотека поставщиков предоставляет API для SDK, позволяющие запускать действия.
  • Клиентская библиотека предоставляет API для клиентских приложений, позволяющие создавать средство запуска действий, которое SDK могут использовать для запроса у приложений запуска действий.

Эти библиотеки предоставляют следующие API:

  • SdkActivityLauncher : Этот лаунчер позволяет SDK обрабатывать запуск действий из клиентского приложения. Клиентские приложения должны создать лаунчер и передать его в качестве параметра API SDK, которые запускают действия.
  • <T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean ) : Функция расширения, которую клиентское приложение может вызывать из своих активностей для создания лаунчеров.
  • SdkActivityLauncher.launchSdkActivity(IBinder) : Метод, используемый SDK для запроса запуска Activity в приложении.

Процесс запуска действий с использованием библиотек действий выглядит следующим образом:

  1. SDK добавляет параметр типа SdkActivityLauncher к любому API, который будет запускать активности.
  2. Клиентское приложение вызывает createSdkActivityLauncher для одной из своих активностей, чтобы создать средство запуска, которое можно передать в SDK при вызовах API.
  3. SDK вызывает метод SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat) и получает токен идентификатора.
  4. SDK вызывает launchSdkActivity для запуска активности.

На следующей диаграмме показана последовательность действий при использовании библиотек активности.

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

API платформы

Платформа предоставляет следующие API для упрощения создания и управления изолированными процессами в среде выполнения SDK:

  • SdkSandboxActivityHandler : Обработчик действий используется для уведомления SDK о создании действия и его регистрации в SDK.
  • Для упрощения регистрации обработчиков действий SDK может использовать следующие методы в классе SdkSandboxController :
  • SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder) : Этот метод, вызываемый из клиентского приложения, запускает создание активностей для SDK. Клиентское приложение должно передать в качестве параметров выбранную им начальную активность и идентификатор обработчика активности SDK.

Для запуска активности с использованием API платформы SDK должны следовать следующей последовательности действий:

  1. SDK регистрирует обработчик действий, используя предоставленные API, и получает идентификатор.
  2. SDK использует этот идентификатор совместно со своим клиентским приложением.
  3. Клиентское приложение вызывает метод для запуска активности в среде выполнения SDK с использованием API платформы startSdkSandboxActivity(Activity, IBinder) , передавая в качестве параметров выбранную начальную активность для этой новой активности и идентификатор обработчика активности.
  4. Платформа запускает Activity и уведомляет SDK через обратный вызов в обработчике Activity ( SdkSandboxActivityHandler.onActivityCreated(Activity) ).
  5. SDK использует это действие для отображения в нём рекламы.

Использование API платформы обязывает SDK в подходящем случае передавать идентификатор SdkSandboxActivityHandler клиентскому приложению через свои API и указывать клиентским приложениям, как его использовать.

На приведенной ниже блок-схеме в примере SDK есть метод launchActivity(AppCallback) , который ожидает обратный вызов (определенный как часть API SDK). Этот обратный вызов используется SDK для передачи идентификатора обработчика активности ( SdkSandboxActivityHandler ) клиентскому приложению.

Диаграмма последовательности API платформы
Диаграмма последовательности, показывающая процесс запуска действия с использованием API платформы.

Видимость

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

SDK не может использовать те же API представления, что и вне среды выполнения SDK, для определения видимости рекламы для пользователя, поскольку представление рекламы не привязано к окну приложения ( видимость ).

В отличие от этого, предоставляемая платформой активность выполняется непосредственно в процессе выполнения SDK, что устраняет необходимость в дополнительных каналах и позволяет SDK использовать стандартные API Android Activity и View .

В связи с этими различиями в реализации, предпринимаются постоянные усилия по унификации интерфейсов для получения сигналов видимости независимо от контекста загрузки рекламы.

Жизненный цикл

Объект ActivityHolder передаваемый в SDK через SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) , реализует LifecycleOwner и может использоваться для получения информации о Lifecycle.Event .

Назад к навигации

Метод ActivityHolder.getOnBackPressedDispatcher() возвращает OnBackPressedDispatcher , который можно использовать для регистрации экземпляров OnBackPressedCallback для обработки возврата назад.