Среда выполнения 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 в приложении.
Процесс запуска действий с использованием библиотек действий выглядит следующим образом:
- SDK добавляет параметр типа
SdkActivityLauncherк любому API, который будет запускать активности. - Клиентское приложение вызывает
createSdkActivityLauncherдля одной из своих активностей, чтобы создать средство запуска, которое можно передать в SDK при вызовах API. - SDK вызывает метод
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)и получает токен идентификатора. - SDK вызывает
launchSdkActivityдля запуска активности.
На следующей диаграмме показана последовательность действий при использовании библиотек активности.
API платформы
Платформа предоставляет следующие API для упрощения создания и управления изолированными процессами в среде выполнения SDK:
-
SdkSandboxActivityHandler: Обработчик действий используется для уведомления SDK о создании действия и его регистрации в SDK. - Для упрощения регистрации обработчиков действий SDK может использовать следующие методы в классе
SdkSandboxController:-
.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler): Регистрирует экземплярSdkSandboxActivityHandler, который возвращает идентификаторIBinder. -
.unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler): Отменяет регистрацию экземпляраSdkSandboxActivityHandler, используя его идентификатор.
-
-
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder): Этот метод, вызываемый из клиентского приложения, запускает создание активностей для SDK. Клиентское приложение должно передать в качестве параметров выбранную им начальную активность и идентификатор обработчика активности SDK.
Для запуска активности с использованием API платформы SDK должны следовать следующей последовательности действий:
- SDK регистрирует обработчик действий, используя предоставленные API, и получает идентификатор.
- SDK использует этот идентификатор совместно со своим клиентским приложением.
- Клиентское приложение вызывает метод для запуска активности в среде выполнения SDK с использованием API платформы
startSdkSandboxActivity(Activity, IBinder), передавая в качестве параметров выбранную начальную активность для этой новой активности и идентификатор обработчика активности. - Платформа запускает Activity и уведомляет SDK через обратный вызов в обработчике Activity (
SdkSandboxActivityHandler.onActivityCreated(Activity)). - SDK использует это действие для отображения в нём рекламы.
Использование API платформы обязывает SDK в подходящем случае передавать идентификатор SdkSandboxActivityHandler клиентскому приложению через свои API и указывать клиентским приложениям, как его использовать.
На приведенной ниже блок-схеме в примере SDK есть метод launchActivity(AppCallback) , который ожидает обратный вызов (определенный как часть API SDK). Этот обратный вызов используется SDK для передачи идентификатора обработчика активности ( SdkSandboxActivityHandler ) клиентскому приложению.
Видимость
В среде выполнения SDK реклама, интегрированная в иерархию представлений клиентского приложения, использует побочные каналы для рендеринга представлений SDK из процесса SDK в процесс клиентского приложения.
SDK не может использовать те же API представления, что и вне среды выполнения SDK, для определения видимости рекламы для пользователя, поскольку представление рекламы не привязано к окну приложения ( видимость ).
В отличие от этого, предоставляемая платформой активность выполняется непосредственно в процессе выполнения SDK, что устраняет необходимость в дополнительных каналах и позволяет SDK использовать стандартные API Android Activity и View .
В связи с этими различиями в реализации, предпринимаются постоянные усилия по унификации интерфейсов для получения сигналов видимости независимо от контекста загрузки рекламы.
Жизненный цикл
Объект ActivityHolder передаваемый в SDK через SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) , реализует LifecycleOwner и может использоваться для получения информации о Lifecycle.Event .
Назад к навигации
Метод ActivityHolder.getOnBackPressedDispatcher() возвращает OnBackPressedDispatcher , который можно использовать для регистрации экземпляров OnBackPressedCallback для обработки возврата назад.