Предложение по дизайну видимости во время выполнения SDK

SDK для рекламы в среде выполнения SDK не имеют доступа к иерархии представлений издателя. Вместо этого SDK в среде выполнения используют собственные представления. SDK не может использовать те же API для отображения представлений, что и вне среды выполнения SDK, для определения видимости рекламы пользователю, поскольку представление рекламы не привязано к окну приложения. Это включает в себя API для отображения представлений Android, такие как getLocationOnScreen , getLocationInWindow или getVisibility , которые не возвращают ожидаемые значения.

Поддержка измерения видимости рекламы является ключевым требованием среды выполнения SDK . Данное проектное предложение направлено на обеспечение поддержки Open Measurement и аналогичных сервисов измерения. Обсуждаемые здесь решения также могут быть применимы к API отчетов по атрибуции .

Возможности

Данная разработка призвана помочь рекламным SDK или партнерам по измерению эффективности вычислять следующие данные о видимости рекламы (названия являются предварительными и могут быть изменены):

Иллюстрация, демонстрирующая взаимодействие компонентов среды выполнения SDK.
Обзор возможностей просмотра данных во время выполнения SDK.
  • viewport [Rect] : Представляет геометрию экрана устройства или окна приложения в зависимости от возможностей платформы.
  • uiContainerGeometry [Rect] : Геометрия отображаемого объекта SandboxedSdkView .
  • alpha [float] : Прозрачность отображаемого объекта SandboxedSdkView .
  • onScreenGeometry [Rect] : Подмножество uiContainerGeometry , которое не обрезается родительскими представлениями, включая viewport .
  • occludedGeometry [Rect] : Части onScreenGeometry , которые перекрываются любыми представлениями в иерархии приложения. Включает Rect для каждого перекрытия, соответствующего нулю, одному или нескольким представлениям приложения, которые пересекаются с SandboxedSdkView onScreenGeometry

Требования

  • Значения параметров uiContainerGeometry , onScreenGeometry и occludedGeometry выражаются в координатном пространстве области viewport .
  • Сообщение об изменении видимости происходит с минимальной задержкой.
  • Видимость можно измерить на протяжении всего жизненного цикла показа рекламы, от первого показа до последнего.

Проектное предложение

Это предложение основано на принципе работы представления пользовательского интерфейса с использованием клиентских и провайдерских библиотек UI. Мы расширим библиотеки UI, чтобы позволить SDK регистрировать одного или нескольких наблюдателей сеанса UI. Наблюдатель будет получать информацию о видимости всякий раз, когда обнаруживаются соответствующие события, изменяющие типы данных в разделе возможностей . SDK для измерения в среде выполнения SDK (реализации OMID и MRAID ) могут прикреплять этого наблюдателя к сеансу UI, чтобы эта информация могла отправляться им напрямую. Партнеры по измерению могут объединять информацию, полученную из библиотек UI, с данными о контенте, уже доступном (например, при использовании скриптов измерения, внедренных в рекламный креатив), для генерации событий видимости JavaScript.

Настройте поток для обеспечения наглядности.
Настройте поток для обеспечения наглядности.

Клиентская библиотека отслеживает изменения в пользовательском интерфейсе рекламы с помощью обработчиков событий, таких как ViewTreeObserver . Всякий раз, когда она определяет, что пользовательский интерфейс рекламы изменился таким образом, что это может повлиять на измерение видимости, клиентская библиотека проверяет, когда было отправлено последнее уведомление наблюдателю. Если последнее обновление превышает допустимую задержку (настраиваемую SDK, минимум 200 мс на мобильных устройствах), создается новый объект AdContainerInfo , и уведомление отправляется наблюдателю. Эта модель, основанная на событиях, лучше для здоровья системы, чем опрос, используемый большинством реализаций OMID на Android сегодня.

API

В библиотеку privacysandbox.ui.core будет добавлено следующее:

  • SessionObserver : Обычно реализуется SDK для измерения и прикрепляется к сессии, возвращаемой SDK через privacysandbox.ui. Этот интерфейс также позволяет SDK для измерения включать определенные категории сигналов видимости. Это, в свою очередь, позволяет клиентской библиотеке пользовательского интерфейса собирать только те сигналы, которые интересуют наблюдателя, что в целом улучшает состояние системы.
  • registerObserver() : Этот метод, добавленный в класс Session , позволяет любому пользователю, имеющему доступ к Session, зарегистрировать наблюдателя. Если наблюдатель зарегистрирован после открытия сессии пользовательского интерфейса, ему сразу же будет отправлена ​​кэшированная AdContainerInfo . Если он зарегистрирован до открытия сессии, ему будет отправлена AdContainerInfo при открытии сессии.
  • AdContainerInfo : Класс с геттерами, позволяющий наблюдателю получать информацию о контейнере рекламы только для чтения для типов данных, перечисленных в разделе «Возможности» выше. Возвращаемые значения этих геттеров будут соответствовать, где это возможно, возвращаемым значениям существующих геттеров класса View и его подклассов. Если контейнер рекламы был создан с помощью Jetpack Compose, это открывает доступ к семантическим свойствам контейнера. Этот класс можно использовать для вычисления событий MRAID и OMID, связанных с видимостью.
  • SessionObserverotifyAdContainerChanged() : Используется для уведомления наблюдателя о любых изменениях видимости. Передает объект AdContainerInfo . Этот метод вызывается при обнаружении событий, влияющих на типы данных, перечисленные в разделе «Возможности». Примечание: Этот метод может вызываться в дополнение к методам объекта Session. Например, Session.notifyResized() вызывается для запроса к SDK на изменение размера объявления, и SessionObserver.notifyAdContainerChanged() также вызывается при этом.
  • SessionObserverotifySessionClosed() : Уведомляет наблюдателя о закрытии сессии.

Будущие усовершенствования

Любой код, выполняющийся в процессе приложения, включая код из библиотеки privacysandbox.ui.client, может быть изменен, если приложение скомпрометировано. Следовательно, любая логика сбора сигналов, выполняющаяся в процессе приложения, подвержена вмешательству со стороны кода приложения. Это также относится к коду SDK, развернутому до появления Privacy Sandbox, который работает в процессе приложения. Таким образом, сбор сигналов библиотекой пользовательского интерфейса не ухудшает ситуацию с безопасностью.

Кроме того, код в среде выполнения SDK может использовать API платформы под названием setTrustedPresentationCallback , который может предоставить более надежные гарантии от фреймворка относительно отображения рекламного интерфейса. setTrustedPresentationCallback работает на уровне поверхности и может помочь сделать утверждения о поверхности, содержащей рекламный интерфейс, путем указания минимальных пороговых значений для отображения, таких как процент видимых пикселей, время на экране или масштаб. Эти данные можно проверить на соответствие данным о видимости, предоставляемым клиентской библиотекой пользовательского интерфейса, как описано выше. Поскольку данные, предоставляемые фреймворком, более надежны, любые события от библиотеки пользовательского интерфейса, данные которых не совпадают с данными от фреймворка, могут быть отброшены. Например, если слушатель, предоставленный setTrustedPresentationCallback вызывается с уведомлением о том, что на экране не отображаются пиксели рекламного интерфейса, а клиентская библиотека пользовательского интерфейса показывает ненулевое количество пикселей на экране, данные из последнего могут быть отброшены.

Открытые вопросы

  1. Какие сигналы видимости вас интересуют, которые не упомянуты в этом пояснении?
  2. Предлагаемый вариант обновления видимости — не реже чем каждые 200 миллисекунд, при условии внесения существенных изменений в пользовательский интерфейс. Устраивает ли вас такая частота? Если нет, то какую частоту вы бы предпочли?
  3. Вы предпочитаете самостоятельно анализировать информацию из setTrustedPresentationCallback или же библиотека пользовательского интерфейса поставщика должна удалять данные из библиотеки пользовательского интерфейса клиента, если они не соответствуют данным setTrustedPresentationCallback ?
  4. Как вы обрабатываете сигналы видимости? Помогите нам понять ваши сценарии использования, отправив отзыв, содержащий ответы на следующие вопросы .