Мобильная атрибуция без GAID: атрибуция установок без рекламных идентификаторов

opoinstall
2026-08-14
5 min read

Как обрабатывать атрибуцию мобильных приложений без доступа к рекламным идентификаторам? Вы можете выполнять атрибуцию установок приложений без GAID или IDFA, однако базовая архитектура при этом меняется: вместо использования постоянного рекламного идентификатора современные конвейеры объединяют механизмы атрибуции на уровне платформ, Google Play Install Referrer, маршрутизацию контекстных параметров первой стороны и проверку на стороне сервера.

Рекламный идентификатор — это сбрасываемый программный идентификатор, предоставляемый мобильной платформой для использования в целях измерения и продвижения. На Android это рекламный идентификатор, предоставляемый через службы Google Play; на платформах Apple доступ к IDFA регулируется механизмом прозрачности отслеживания приложений (App Tracking Transparency).

Термин Определение
Рекламный идентификатор Сбрасываемый программный идентификатор, используемый для измерения мобильной рекламы.
GAID Рекламный идентификатор Google (Google Advertising ID), управляемый через службы Google Play на устройствах Android.
IDFA Идентификатор Apple для рекламодателей (Identifier for Advertisers), регулируемый механизмом App Tracking Transparency в iOS.
Маршрутизация контекстных параметров Передача контекста кампании или реферала от первого лица в рамках инициированного пользователем сценария перехода из веб-среды в приложение.

Кратко: сводка по мобильной атрибуции без использования идентификаторов

Рекламный идентификатор Google не заменяется каким-то одним универсальным идентификатором. Вместо этого атрибуция разделяется на отдельные специализированные примитивы:

  • Отчетность по платным рекламным кампаниям (Android): Используйте API Google Play Install Referrer для получения параметров кампании, обрабатываемых магазином, для установок из Google Play.

  • Отчетность по платным рекламным кампаниям (iOS): Используйте Apple AdAttributionKit и SKAdNetwork для получения подписанных платформой и конфиденциальных постверков.

  • Онбординг из веба в приложение и рефералы: Используйте уровень восстановления контекста установки от первого лица (например, OpoInstall) для восстановления промокодов, идентификаторов комнат и токенов пригласившего при первом запуске.

  • Кросс-приложный ретаргетинг: Требует авторизованного платформой идентификатора или механизма измерения, а также соблюдения применимых правил платформы, элементов управления пользователя и требований к согласию.

Архитектурная матрица решений: выбор правильного примитива атрибуции

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

Функциональное требование Основной технический примитив Зависимость от GAID / IDFA Тип результата атрибуции
Измерение рекламных кампаний в Play Store API Google Play Install Referrer Отсутствует (работает через URL магазина) Контекст установки, предоставленный магазином
Измерение рекламных сетей в iOS Apple AdAttributionKit / SKAdNetwork Отсутствует (опосредовано платформой) Конфиденциальные постверки платформы
Внутриприложный онбординг и отложенный дип-линкинг Маршрутизация контекстных параметров первой стороны Отсутствует (контекст первой стороны) Пользовательский полезный блок данных в реальном времени при первом запуске
Привязка пользовательских рефералов Динамические реферальные токены Отсутствует (на уровне сеанса/аккаунта) Прямое связывание учетных записей пригласившего и приглашенного
Кросс-приложный ретаргетинг пользователей Рекламные механизмы, поддерживаемые платформой Не обязательно; зависит от механизма и политики Идентификатор на уровне пользователя или когорты

Замена GAID: что действительно работает

Когда инженерные команды ищут «замену GAID», они часто пытаются решить несколько несвязанных операционных проблем с помощью одного инструмента. В продакшене архитектуры, зависящие от GAID, необходимо разделить на четыре независимых решения:

                        Устаревшие рабочие процессы GAID
                                 │
     ┌───────────────────────────┼───────────────────────────┐
     │                           │                           │
     ▼                           ▼                           ▼
ROI платных кампаний        Маршрутизация из веба в ऐप  Привязка рефералов
     │                           │                           │
     ▼                           ▼                           ▼
Play Install Referrer /     Контекстные параметры       Восстановление токенов
AdAttributionKit            первой стороны              рефералов первой стороны

Диаграмма международной корпоративной архитектуры, иллюстрирующая переход от устаревших рабочих процессов с единым GAID к четырем специализированным конфиденциальным примитивам атрибуции на светлом крестообразном фоне сетки.
  • Замена получения контекста установки на базе GAID: Используйте Google Play Install Referrer там, где это применимо для установок из Google Play, а также интеграции с рекламными сетями и поддерживаемые платформами API атрибуции. Эти фреймворки предоставляют контекст источника установки без раскрытия постоянных аппаратных или рекламных идентификаторов.

  • Замена GAID для онбординга и дип-линкинга: Разверните уровень восстановления контекста установки от первого лица (например, OpoInstall). Вместо запроса рекламного идентификатора для объединения логов кликов передавайте динамические параметры через собственные URL-адреса кампаний и восстанавливайте их при первом запуске приложения с помощью клиентского SDK.

  • Замена GAID для идентификации пользователей: Используйте аутентифицированные учетные системы первой стороны (например, OAuth или внутренние UUID пользователей) вместо рекламных ключей на уровне устройства.

Основная архитектурная таксономия: что предоставляют различные примитивы

Цель измерения Базовый сигнал Идентификатор на уровне пользователя? Опосредовано платформой?
Измерение рекламы на уровне кампании Apple AdAttributionKit / SKAN Нет Да
Контекст установки из Play Store Google Play Install Referrer Нет Да
Онбординг с отложенными глубокими ссылками Контекстный токен первой стороны Потенциально на уровне аккаунта/сеанса Нет
Привязка пользовательских рефералов Реферальный токен + связывание аккаунтов Да (аккаунт первой стороны) Нет
Кросс-приложная идентификация устройств Авторизованный рекламный идентификатор Да Да

Сравнение GAID, Install Referrer и восстановления параметров первой стороны

Механизм атрибуции Требует GAID / IDFA? Модель идентификатора Основная цель
Рекламный идентификатор Google (GAID) Да Рекламный идентификатор платформы Измерение кросс-приложной рекламы
Google Play Install Referrer Нет Контекст установки, предоставленный магазином Атрибуция кампаний установок Play
Apple AdAttributionKit / SKAN Нет Сигнал атрибуции с сохранением конфиденциальности Измерение платформенной рекламы
Маршрутизация параметров первой стороны Нет Токен первой стороны / контекст аккаунта Дип-линкинг и привязка рефералов

Международная корпоративная сравнительная матричная диаграмма, сопоставляющая GAID, Google Play Install Referrer, Apple AdAttributionKit и контекстную маршрутизацию первой стороны по параметрам конфиденциальности.

Альтернативы GAID для атрибуции Android-приложений

При работе на устройствах Android без доступа к рекламному идентификатору Google инженерные команды развертывают альтернативные механизмы, адаптированные под конкретные каналы кампаний:

Программы пользовательских рефералов и онбординг из веба в приложение
Альтернатива GAID Основной механизм реализации Типичный вариант использования Ключевое операционное ограничение
Google Play Install Referrer API Play Install Referrer Рекламные кампании в Play Store и прямые ссылки на скачивание Ограничено установками, распространяемыми через Google Play
Контекстные токены первой стороны Веб-JS SDK + восстановление через нативный SDK Строго ограничено прямыми пользовательскими путями первой стороны
Платформенные API атрибуции API отчетности по атрибуции Android Privacy Sandbox Агрегированная отчетность о конверсиях рекламных сетей Зависит от развертывания платформы и регистрации
Интеграции сервер-сервер (S2S) Постверки рекламных сетей + бэкенд-API Прямая атрибуция партнеров и сверка API Требует прямой технической интеграции для каждой сети

Как платформы мобильной атрибуции и MMP справляются с измерениями без GAID

Партнеры по измерению мобильных устройств (MMP), такие как AppsFlyer, Adjust, Singular и Branch, скорректировали свои технические архитектуры для поддержки измерений в условиях отсутствия рекламных идентификаторов:

Пользовательские JSON-данные в реальном времени для онбординга
Платформа / Уровень Основной Android-сигнал без ID Основной iOS-сигнал без ID Детализация измерений
MMP / Платформы атрибуции Платформенные сигналы атрибуции, Install Referrer, сетевые API, S2S-интеграции AdAttributionKit / SKAdNetwork и сетевые интеграции Зависит от платформы, сети и фреймворка измерения
Нативные API платформ API Google Play Install Referrer Фреймворк Apple AdAttributionKit Данные постверков и установок, опосредованные магазином
Уровни маршрутизации первой стороны Кэширование контекстных параметров, токены параметров «веб-приложение» Эфемерное сопоставление контекста, динамические универсальные ссылки

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

Почему ограничения рекламных идентификаторов нарушают детерминированную мобильную атрибуцию

Историческая зависимость от постоянных рекламных идентификаторов

Более десятилетия мобильная перформанс-реклама опиралась на детерминированное сопоставление на уровне устройств, обеспечиваемое рекламными идентификаторами платформ: рекламным идентификатором Google (GAID) на Android и идентификатором для рекламодателей (IDFA) на iOS. В этом традиционном рабочем процессе рекламные сети фиксировали рекламный идентификатор пользователя при показе рекламы или клике. Когда приложение впоследствии устанавливалось и запускалось, интегрированный SDK атрибуции запрашивал операционную систему устройства для извлечения соответствующего рекламного идентификатора.

Прямой поиск равенства на стороне сервера (GAIDtextclick==GAIDtextinstallGAID*{\\text{click}} == GAID*{\\text{install}}) устанавливало однозначную связь между затратами на маркетинг и установкой приложения. Этот механизм позволял осуществлять детерминированную атрибуцию по нескольким сетям, кросс-издательское профилирование и автоматический ретаргетинг без необходимости использования состояния сеанса в реальном времени или передачи контекстных параметров.

Механизм обнуления идентификаторов и ограничения платформ

Архитектуры мобильных операционных систем развивались в сторону ограничения кросс-приложного отслеживания устройств без явного согласия пользователя.

На платформах Apple рекомендации Apple App Tracking Transparency требуют, чтобы приложения запрашивали разрешение на отслеживание через ATTrackingManager.requestTrackingAuthorization. При отсутствии разрешения операционная система скрывает IDFA. Приложения должны корректно обрабатывать состояния denied, restricted и notDetermined, не предполагая, что рекламный идентификатор доступен.

На Android, согласно документации об изменениях поведения в Android 13, Google внедрила явные элементы управления разрешениями в службах Google Play. Для приложений, ориентированных на Android 13 (уровень API 33) или выше, разработчики должны объявить разрешение com.google.android.gms.permission.AD_ID в своем манифесте для доступа к рекламному идентификатору. Если это разрешение опущено или когда пользователь ограничивает рекламное отслеживание либо удаляет свой рекламный идентификатор, службы Google Play могут вернуть обнуленный идентификатор (00000000-0000-0000-0000-000000000000) или указать, что идентификатор недоступен, в зависимости от состояния устройства и поведения служб Google Play.

Сбой детерминированных конвейеров рекламной атрибуции

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

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

В этой архитектуре OpoInstall представлен как уровень восстановления контекста установки / отложенного дип-линкинга первой стороны, а не как универсальная замена для Google Play Install Referrer, AdAttributionKit, SKAdNetwork или других опосредованных платформами систем рекламной атрибуции.

Как разрешения рекламного идентификатора Android и Apple ATT влияют на атрибуцию

Политики разрешений AD_ID в Google Play на Android 13 и выше

Google Play применяет детализированное управление политиками в отношении извлечения рекламных идентификаторов:

  • Требование объявления в манифесте: Приложения, ориентированные на Android 13 (уровень API 33) или выше, должны объявить <uses-permission android:name="com.google.android.gms.permission.AD_ID"/> в своем манифесте. Если это опущено, вызовы AdvertisingIdClient.getAdvertisingIdInfo(context) возвращают нули или указывают на недоступное состояние.

  • Элементы управления конфиденциальностью пользователя: Когда пользователь ограничивает рекламное отслеживание или удаляет свой рекламный идентификатор, службы Google Play возвращают нули или недоступное состояние. Политики разработчиков Google Play прямо запрещают связывать или восстанавливать сброшенный рекламный идентификатор с помощью других постоянных идентификаторов устройств.

  • Исключения из политик для конфиденциальных приложений: Политики Google Play запрещают объявление разрешения AD_ID в приложениях, ориентированных на детей или подпадающих под ограничения семейной политики, требуя от разработчиков внедрения конвейеров измерений без использования идентификаторов.

Фреймворк Apple AppTrackingTransparency и состояния авторизации

В iOS доступ к идентификаторам регулируется системным состоянием ATTrackingManager.AuthorizationStatus:

  • notDetermined (0): Пользователь еще не ответил на запрос авторизации ATT. Приложение не должно предполагать, что доступ к IDFA возможен.

  • restricted (1): Доступ к устройству ограничен родительским контролем или профилями управления устройствами; отслеживание отключено на уровне всей системы.

  • denied (2): Пользователь явно выбрал «Просить приложение не отслеживать» в диалоговом окне или отключил запросы на отслеживание глобально в настройках конфиденциальности iOS. Приложение не должно полагаться на IDFA.

  • authorized (3): Пользователь явно предоставил разрешение на отслеживание в сторонних приложениях и на веб-сайтах, разрешив доступ к IDFA с учетом политик платформы Apple.

Важное заявление об архитектурных границах

Важное различие: Удаление GAID или IDFA из архитектуры атрибуции не делает автоматически каждый альтернативный метод отслеживания безопасным с точки зрения конфиденциальности или соответствующим политикам. Согласно руководству по фреймворку App Tracking Transparency от Apple, Apple определяет отслеживание как связывание данных пользователя или устройства, собранных из вашего приложения, со сторонними данными для целевой рекламы или измерений, либо передачу данных брокеру данных. Если инженерный конвейер собирает характеристики устройства для восстановления постоянной кросс-приложной личности, он по-прежнему подпадает под действие политик платформ в отношении отслеживания независимо от того, осуществлялся ли доступ к рекламному идентификатору. Маршрутизация параметров первой стороны должна оставаться в рамках непосредственного онбординга и контекста конверсии инициированного пользователем пути.

Что не означает атрибуция без идентификаторов

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

Три проблемы атрибуции, которые не следует путать

При проектировании мобильной атрибуции без рекламных идентификаторов инженерные команды должны различать три разные операционные цели:

Проблема Используемые основные сигналы Инженерная цель
Рекламная атрибуция Платформенные API атрибуции, Google Play Install Referrer, измерения, специфичные для рекламных сетей Измерение эффективности рекламных кампаний и окупаемости маркетингового бюджета
Отложенный дип-линкинг Параметры запроса URL, универсальные ссылки, ссылки приложений Восстановление внутриприложного контекста назначения после установки из магазина
Реферальная атрибуция Реферальные токены первой стороны, идентификаторы учетных записей пользователей Связывание аккаунтов пригласившего и приглашенного для получения продуктовых вознаграждений

Механизм маршрутизации первой стороны может решить задачу отложенного дип-линкинга и реферальной атрибуции без необходимости использования GAID или IDFA, но его не следует преподносить как универсальную замену рекламной атрибуции, опосредованной платформой.

Когда командам роста следует развертывать уровень атрибуции первой стороны?

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

  • SaaS и приложения по подписке: B2B-платформы, где маркетинговый трафик начинается в десктопном или мобильном веб-браузере и конвертируется в учетные записи в нативном приложении, требующие восстановления предварительно аутентифицированного сеанса.

  • Игровые приложения: Многопользовательские или социальные игры, где новые игроки должны автоматически присоединяться к матчу, гильдии или комнате пригласившего при первом запуске без ввода кодов комнат вручную.

  • Платформы электронной коммерции: Шопинг-приложения, предоставляющие персонализированные приветственные скидки или восстанавливающие активное состояние корзины покупок из кампаний в мобильном вебе прямо в представления нативной оплаты.

  • Реферальные и бонусные платформы: Продукты, стимулирующие органические вирусные петли, которые требуют надежного связывания токенов пригласившего и приглашенного без принуждения пользователей копировать и вставлять строки купонов.

Архитектурный проект маршрутизации параметров первой стороны без использования идентификаторов

Отделение атрибуции от постоянных идентификаторов устройств

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

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

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

Двухуровневая архитектура атрибуции

Корпоративная архитектура атрибуции разделяет прямой дип-линкинг и потоки установок, опосредованные магазином:

                Маркетинговое взаимодействие с пользователем
                          │
         ┌────────────────┴────────────────┐
         │                                       │
   Прямая ссылка на прил.                 Поток магазина / рекламы
         │                                       │
 Уверен. ссылки /                   ┌──────┴───────┐
    Ссылки прил.                    │                           │
         │                       Android                       Apple
         │                   Play Install                   Платформная адм.
         │                      Referrer                    Атрибуция
         │                            │                              │
         └──────────────┬────────┴──────┬───────┘
                                       │                              │
                                         Сигналы атрибуции / маршрутизации
                                                        │
                                             Проверка на стороне сервера
                                                        │
                                    ┌─────────┴─────────┐
                                    │                                      │
                              Контекст найден                        Нет сигнала
                                   │                                      │
                             Маршрут / Связывание                    Органика /
                             Первая сторона                      Корректный резерв

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

Техническая механика маршрутизации контекстных параметров и резервных вариантов

Роль передачи параметров первой стороны

Передача параметров первой стороны опирается на стандартный разбор веб-запросов и безопасное кэширование сеансов на стороне сервера. Разработчики могут обратиться к документации по SDK OpoInstall за техническими спецификациями касательно моделей привязки параметров.

Маршрутизация параметров первой стороны, используемая исключительно для прямого онбординга, не обязательно требует ATT, если реализация не подпадает под определение отслеживания от Apple; команды должны оценивать фактический поток данных и цель в соответствии с текущими правилами Apple.

Резервные варианты атрибуции установок, зависящие от платформы

Когда прямые глубокие ссылки прерываются установкой из магазина, платформо-специфичные примитивы предоставляют структурированные данные атрибуции:

  • Android (Google Play Install Referrer): Руководство по API Google Play Install Referrer раскрывает информацию о реферере, связанную с установкой из Play Store, и предоставляет временные метки кликов и установок. Документация API определяет 90-дневное окно доступности данных реферера. Приложения должны сохранять и обрабатывать это значение в соответствии с собственными правилами атрибуции и обработки переустановок, а не рассматривать его как постоянный идентификатор установки. Обратите внимание, что параметры должны явно передаваться через Google Play; произвольные параметры запроса целевой страницы не заполняют этот API автоматически.

  • Атрибуция на платформах Apple: Современный стек атрибуции приложений от Apple включает фреймворк Apple AdAttributionKit, наряду с поддержкой взаимодействия со SKAdNetwork для поддерживаемых рекламных рабочих процессов. Сам по себе AdAttributionKit не требует запроса на авторизацию ATT; однако другие потоки данных в том же приложении все равно могут представлять собой отслеживание и поэтому требовать авторизации ATT. AdAttributionKit работает в рамках подписанной рекламной системы Apple с подходящими рекламными сетями, зарегистрированными во фреймворках атрибуции Apple.

Почему атрибуция на основе буфера обмена не должна быть основной стратегией

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

  • Явное ограничение областей видимости: Полезные нагрузки должны иметь короткий срок жизни и ограничиваться минимальным объемом специфических для приложения данных, необходимых для предполагаемого потока первой стороны. Чувствительные значения должны быть надежно защищены при передаче и хранении.

  • Немедленная очистка: Приложения должны оперативно очищать или перезаписывать временные токены параметров после их использования во время последовательности первоначального запуска.

  • Соответствие правилам: Используйте механизмы буфера обмена только там, где существует четко определенный пользовательский поток первой стороны и после прохождения применимой проверки политик платформ.

Корректный резервный вариант и неатрибуцированные состояния

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

  • Прямая ссылка приложения / Универсальная ссылка: Мгновенное пробуждение нативного приложения, если оно уже установлено на устройстве.

  • Передача параметров через магазин: Извлечение параметров кампании через платформенные API (такие как Google Play Install Referrer), когда они доступны.

  • Восстановление параметров первой стороны: Сопоставление сеансов новых установок с активными взаимодействиями на веб-лендинге в течение узкого временного окна.

  • Нет сигнала (Неатрибуцировано): Когда сетевые условия меняются, сеансы истекают или совпадающий контекст отсутствует, приложение безопасно переходит в чистое состояние по умолчанию без прерывания процесса онбординга пользователя.

Пример сценария реализации: восстановление контекста с помощью OpoInstall

Чтобы понять, как эти примитивы работают в продакшене, рассмотрим кросс-платформенное мобильное игровое приложение, выполняющее два одновременных канала привлечения:

  • Канал A (Платная программная реклама): Рекламная кампания, запущенная в внешних рекламных сетях с перенаправлением в App Store и Google Play.

  • Канал B (Вирусный шеринг пользователей): Существующие игроки делятся пользовательскими ссылками-приглашениями (https://game.example.com/join?room=9876&inviter=usr_432) через социальные мессенджеры.

*   

[Канал А: Платная рекл.] ──> [Загрузка из магаз.] ──> [Play Referrer / AdAttributionKit] ──> [Агр. окупаемость рекл.]
[Канал Б: Приглашение] ──> [Веб-лендинг]        ──> [Восстановление токена 1-й стороны]   ──> [Автоприсоединение к комнате]

Когда новый пользователь устанавливает приложение через Канал А, приложение полагается на API Google Play Install Referrer или Apple AdAttributionKit для отчета о производительности кампании в маркетинговые панели мониторинга. Когда пользователь устанавливает приложение через Канал Б, SDK маршрутизации первой стороны перехватывает динамический токен приглашения при первом запуске, мгновенно присоединяя нового игрока к комнате 9876 без запроса рекламных идентификаторов или вызова запросов ATT.

Типичные случаи сбоев в продакшене при мобильной атрибуции без идентификаторов

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

  • Случай сбоя 1: Параметры целевой страницы утеряны после перенаправления магазина: Если ссылки кампаний перенаправляются через закодированные промежуточные сокращатели URL, параметры запроса, такие как channelCode или referrer, могут быть удалены до достижения скрипта целевой страницы или пункта назначения в магазине приложений.

  • Случай сбоя 2: Дублирование получения рефералов и отсутствие блокировок идемпотентности: В продакшене, если мобильный клиент вызывает восстановление параметров при каждом событии Activity.onResume или возвращении приложения на передний план без проверки локального флага персистентности, пользователи могут инициировать дублирующие запросы на получение вознаграждений или повторную навигацию по глубоким ссылкам.

  • Случай сбоя 3: Неправильное управление состоянием переустановки: Хотя Google Play Install Referrer сохраняет исторические данные реферера в течение до 90 дней, переустановленные приложения могут получать устаревшие данные атрибуции из предыдущего жизненного цикла установки, если бэкенд клиента не проверяет, завершил ли аккаунт регистрацию ранее.

  • Случай сбоя 4: Органические установки ошибочно классифицируются через широкие окна сопоставления: Если окна сопоставления сеансов на стороне сервера настроены слишком широко в средах с общими сетями или высокой плотностью пользователей, органические установки могут пересекаться с несвязанными сеансами кликов по веб-ссылкам.

Иллюстративный шаблон интеграции SDK для восстановления контекста установки первой стороны

Обзор интеграции на стороне клиента

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

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

// Реализация на Android: извлечение параметров без ID (архитектурный шаблон)
// Расположение в Части A: [CODE_BLOCK_01]
// Примечание: Иллюстративная псевдореализация на основе контрактов SDK OpoInstall.

// ----------------------------------------------------------------------------
// 1. AndroidManifest.xml (Пример выдержки)
// ----------------------------------------------------------------------------
/*
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application android:name=".CustomApplication" android:label="@string/app_name">
        <!-- Настройте ключ приложения методом, указанным в документации поставщика -->
        <meta-data android:name="com.opoinstall.APP_KEY" android:value="YOUR_APPKEY"/>
    </application>
</manifest>
*/

// ----------------------------------------------------------------------------
// 2. CustomApplication.kt: Жизненный цикл конечного автомата на уровне приложения
// ----------------------------------------------------------------------------
package com.example.myapp

import android.app.Application
import android.util.Log
import com.opoinstall.api.OpoData
import com.opoinstall.api.OpoError
import com.opoinstall.api.OpoInstall
import com.opoinstall.api.ResultCallBack

class CustomApplication : Application() {

    enum class AttributionState {
        NOT_STARTED,
        FETCHING,
        PROCESSED
    }

    override fun onCreate() {
        super.onCreate()
        
        // Инициализация SDK маршрутизации первой стороны в главном процессе
        OpoInstall.initialize(this)

        // Получение контекста установки один раз на уровне приложения
        if (getAttributionState() == AttributionState.NOT_STARTED) {
            fetchInstallContext()
        }
    }

    private fun fetchInstallContext() {
        setAttributionState(AttributionState.FETCHING)

        OpoInstall.getInstance().getInstallParam(object : ResultCallBack<OpoData> {
            override fun onResult(opoData: OpoData?) {
                setAttributionState(AttributionState.PROCESSED)
                if (opoData != null) {
                    val channelCode = opoData.channelCode
                    val customData = opoData.data
                    Log.d("InstallContext", "Восстановленный контекст: Канал=$channelCode, Данные=$customData")
                    handleInstallContext(channelCode, customData)
                }
            }

            override fun onError(opoError: OpoError?) {
                // При временном сбое сети состояние может оставаться доступным для повтора или безопасно откатываться
                Log.w("InstallContext", "Запрос атрибуции завершен со статусом: ${opoError?.errorMsg}")
                setAttributionState(AttributionState.PROCESSED)
            }
        })
    }

    private fun getAttributionState(): AttributionState {
        val raw = getSharedPreferences("attribution_prefs", MODE_PRIVATE)
            .getString("state", AttributionState.NOT_STARTED.name)
        return AttributionState.valueOf(raw ?: AttributionState.NOT_STARTED.name)
    }

    private fun setAttributionState(state: AttributionState) {
        getSharedPreferences("attribution_prefs", MODE_PRIVATE)
            .edit()
            .putString("state", state.name)
            .apply()
    }

    private fun handleInstallContext(channelCode: String?, customData: String?) {
        // Передача восстановленного контекста во внутренние службы аккаунта/маршрутизации
    }
}

Реализация на iOS: интеграция жизненного цикла Swift

На iOS приложение интегрирует SDK в рамках делегата жизненного цикла приложения. SDK асинхронно извлекает параметры установки в главном потоке выполнения без вызова запросов авторизации AppTrackingTransparency, когда кросс-приложное отслеживание не выполняется.

Приведенная ниже реализация на Swift демонстрирует иллюстративный рабочий процесс инициализации и извлечения параметров:

// Шаблон интеграции iOS: получение контекста установки на уровне приложения
// Расположение в Части A: [CODE_BLOCK_02]
// Примечание: ТОЛЬКО ПСЕВДОКОД. Имена типов и методов являются иллюстративными заполнителями.

// ----------------------------------------------------------------------------
// 1. Info.plist (Пример выдержки)
// ----------------------------------------------------------------------------
/*
<!-- Настройте ключ приложения методом, указанным в документации поставщика -->
<key>com.opoinstall.APP_KEY</key>
<string>YOUR_APPKEY</string>
*/

// ----------------------------------------------------------------------------
// 2. AppDelegate.swift: Инициализация жизненного цикла и извлечение контекста
// ----------------------------------------------------------------------------
import UIKit
// Примечание: Импорт модуля SDK опущен намеренно; используйте имя модуля, предоставленное вашим менеджером пакетов.

enum InstallContextState: String {
    case notStarted = "NOT_STARTED"
    case fetching = "FETCHING"
    case processed = "PROCESSED"
}

@main
class AppDelegate: UIResponder, UIApplicationDelegate, OpoInstallDelegate {

    var window: UIWindow?

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        
        // Инициализация SDK маршрутизации первой стороны без вызова авторизации ATT
        OpoInstallSDK.initWith(self)

        // Защита извлечения с помощью проверки конечного автомата в точке входа приложения
        if getInstallContextState() == .notStarted {
            fetchInstallContext()
        }

        return true
    }

    private func fetchInstallContext() {
        setInstallContextState(.fetching)

        // Асинхронное получение отложенных параметров установки
        OpoInstallSDK.defaultManager()?.getInstallParmsCompleted({ [weak self] (appData: OpoinstallData?) in
            DispatchQueue.main.async {
                self?.setInstallContextState(.processed)

                if let data = appData?.data {
                    let channel = appData?.channelCode
                    self?.handleInstallContext(channelCode: channel, customData: data)
                }
            }
        })
    }

    private func getInstallContextState() -> InstallContextState {
        let raw = UserDefaults.standard.string(forKey: "install_context_state") ?? InstallContextState.notStarted.rawValue
        return InstallContextState(rawValue: raw) ?? .notStarted
    }

    private func setInstallContextState(_ state: InstallContextState) {
        UserDefaults.standard.set(state.rawValue, forKey: "install_context_state")
    }

    private func handleInstallContext(channelCode: String?, customData: String) {
        // Передача восстановленного контекста во внутренние службы аккаунта/маршрутизации
    }

    // Обратный вызов делегата универсальных ссылок для глубокой привязки
    func application(
        _ application: UIApplication,
        continue userActivity: NSUserActivity,
        restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
    ) -> Bool {
        OpoInstallSDK.continue(userActivity)
        return true
    }
}

Инженерные соображения для клиентской реализации

  • Неблокирующие жизненные циклы пользовательского интерфейса: Всегда инициализируйте SDK атрибуции асинхронно и запрашивайте параметры без блокировки основного потока пользовательского интерфейса во время запуска приложения.

  • Локальная обработка идемпотентности: Поддерживайте конечный автомат или постоянный флаг (например, NOT_STARTED, FETCHING, PROCESSED) для чистого управления извлечением параметров и предотвращения избыточных запросов API.

  • Защита от повторного воспроизведения на стороне сервера: Проверяйте полезные нагрузки динамических параметров по логам транзакций бэкенда, чтобы убедиться, что реферальные коды или промотокены не могут быть воспроизведены злонамеренно.

Платформенные API атрибуции и переход на Privacy Sandbox

Платформенная атрибуция Android и переход на Privacy Sandbox

API отчетности об атрибуции Android были разработаны для поддержки измерений с сохранением конфиденциальности в приложениях и на сайтах без использования кросс-доменных идентификаторов.

API отчетности об атрибуции Android доступны для поддерживаемых интеграций Privacy Sandbox, но они не являются универсальной заменой Install Referrer или интеграции с MMP. Применимость в продакшене зависит от конкретной версии Android, интеграции рекламных технологий, требований к регистрации и поддержки экосистемы. Командам следует проверить текущую документацию по Android Privacy Sandbox перед тем, как делать отчетность об атрибуции зависимостью продакшена.

Для Android-приложений, распространяемых через Google Play, Google Play Install Referrer остается практичным механизмом первой стороны для извлечения параметров кампании, связанных с установкой из Play Store. Рекламные сети и поставщики атрибуции также могут предлагать поддерживаемые платформами интеграции измерений.

Платформенная атрибуция Apple: AdAttributionKit и SKAdNetwork

На iOS компания Apple предоставляет механизмы атрибуции с сохранением конфиденциальности, сосредоточенные вокруг AdAttributionKit, который поддерживает рекламные кампании приложений в App Store и на альтернативных торговых площадках, наряду с поддержкой взаимодействия со SKAdNetwork. Эти фреймворки предоставляют сигналы атрибуции, опосредованные платформой, без раскрытия постоянного рекламного идентификатора устройства. Детализация отчетности и тайминги по-прежнему регулируются порогами конфиденциальности Apple и окнами атрибуции.

Сосуществование маршрутизации первой стороны и платформных API

Платформенные API конфиденциальности и контекстная маршрутизация первой стороны решают разные инженерные задачи:

  • Платформенные API конфиденциальности: Разработаны для измерения рекламы на макроуровне, расчета ROI рекламных сетей и оптимизации программных кампаний без постоянных идентификаторов.

  • Маршрутизация параметров первой стороны: Разработана для онбординга приложений на микроуровне, мгновенного связывания реферальных наград между пользователями, маршрутизации глубоких ссылок и прямых путей конверсии из веба в приложение.

Как проверить точность атрибуции в средах песочницы

Тестирование атрибуции установок при недоступности доступа к рекламному идентификатору

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

  • Состояние отсутствия AD_ID: Разверните тестовую сборку Android, которая исключает разрешение com.google.android.gms.permission.AD_ID из AndroidManifest.xml, и убедитесь, что приложение инициализируется чисто.

  • Ограничения пользовательских идентификаторов: На тестовом устройстве Android со службами Google Play включите рекламные ограничения или удалите рекламный идентификатор в системных настройках, чтобы убедиться, что извлечение параметров не вызывает сбоев или зависаний.

  • Симуляция кампании Play Store: Запустите процесс установки с помощью тестового URL-адреса кампании, который явно передает ожидаемое значение через механизм Google Play Install Referrer. Не предполагайте, что произвольный параметр запроса целевой страницы автоматически станет значением Install Referrer.

  • Проверка переустановки: Переустановите приложение после предыдущей атрибутированной установки и убедитесь, что поток атрибуции некорректно не использует повторно устаревшее состояние первой установки.

  • Проверка органического резерва: Запустите несвязанную сборку, чтобы подтвердить, что getInstallParam чисто разрешается в null или органический резервный вариант без зависаний.

Симуляция запрещенных состояний ATT на физических устройствах iOS

Чтобы протестировать извлечение параметров iOS при запрете отслеживания:

  • Установите тестовую сборку на физическое устройство iOS через Xcode.

  • Убедитесь, что метод извлечения параметров SDK выполняется асинхронно и успешно разрешает параметры без запроса ATT или обращения к API IDFA.

  • Протестируйте поведение при запуске приложения как в сценариях холодного старта, так и при пробуждении из фонового режима.

Аудит сетевых полезных данных на предмет минимизации данных

Команды безопасности и комплаенса должны проверять сетевой трафик на стороне клиента с помощью прокси HTTP:

  • Подтверждение исключения ID: Убедитесь, что исходящие запросы атрибуции не включают постоянные идентификаторы, такие как IMEI, MAC-адреса, Android ID (SSAID) или неавторизованные строки IDFA.

  • Безопасность передачи: Убедитесь, что связь через API атрибуции использует HTTPS с актуальными конфигурациями TLS и стандартной проверкой сертификатов.

  • Защита полезных данных: Подтвердите, что динамические токены, хранящиеся при передаче или во временных буферах, используют соответствующие стандарты защиты.

Международная 4-шаговая блок-схема рабочего процесса разработчика для проверки мобильной атрибуции без рекламных идентификаторов по исключениям AD_ID Android, симуляциям Play Store и прокси-аудитам.

Часто задаваемые вопросы (FAQ)

Можно ли выполнять атрибуцию установок без GAID?
Да. Установки мобильных приложений можно атрибутировать без GAID, комбинируя Google Play Install Referrer, фреймворки атрибуции Apple с сохранением конфиденциальности и уровни контекстной маршрутизации первой стороны в зависимости от конкретной цели измерения.
Могут ли платформы мобильной атрибуции работать без GAID или IDFA?
Да. Крупные партнеры по измерению мобильных устройств (MMP) и платформы атрибуции обрабатывают установки без рекламных идентификаторов путем приема сигналов, опосредованных платформами (таких как Google Play Install Referrer, Apple AdAttributionKit и SKAdNetwork), наряду с прямыми сетевыми интеграциями «сервер-сервер» (S2S).
Заменяет ли Install Referrer GAID?
Нет. Google Play Install Referrer и GAID служат для разных архитектурных целей. Install Referrer предоставляет параметры кампании, прикрепленные к URL установки Play Store, тогда как GAID — это рекламный идентификатор на уровне устройства, используемый для кросс-приложного профилирования. Install Referrer поддерживает рабочие процессы атрибуции установок без необходимости использования GAID, но он не является заменой общего назначения для кросс-приложного отслеживания рекламы.
Что происходит, когда Android-приложение запрашивает GAID без разрешения AD_ID?
Для приложений, ориентированных на Android 13 (уровень API 33) или выше, службы Google Play ограничивают доступ к рекламному идентификатору, если он не объявлен в манифесте. Когда разрешение опущено или доступ отключен пользовательскими настройками, API возвращает строку нулей (`00000000-0000-0000-0000-000000000000`) или указывает, что идентификатор недоступен.
Устраняет ли удаление IDFA требования Apple ATT?
Не автоматически. ATT применяется в зависимости от того, представляют ли практики работы с данными приложения отслеживание, а не просто от того, читает ли приложение IDFA. Например, передача собранных приложением данных другим компаниям для отслеживания в приложениях и на сайтах может потребовать авторизации ATT, даже если реализация не использует IDFA. Командам следует оценивать фактический поток данных, получателей и цель в соответствии с текущим руководством Apple по прозрачности отслеживания приложений.
Является ли контекстное сопоставление тем же самым, что и фингерпринтинг?
Нет. Контекстное сопоставление может использовать контекст кампании или реферала первой стороны без создания постоянной кросс-приложной личности устройства. Тем не менее, является ли конкретная реализация соответствующей требованиям, зависит от собранных данных, метода сопоставления, периода хранения, цели, получателей и применимых правил платформ. Настоящий фингерпринтинг пытается создать постоянные идентификаторы устройств в разных приложениях, что ограничивается основными операционными системами.
Что происходит, когда параметр установки не удается восстановить?
Когда сетевые условия прерывают сопоставление сеансов или пользователь устанавливает приложение без взаимодействия со ссылкой кампании, SDK атрибуции возвращает состояние null или тайм-аут. Приложения должны корректно обрабатывать это состояние, загружая стандартные сценарии онбординга без прерывания взаимодействия с пользователем.

Создание инфраструктуры атрибуции без идентификаторов с помощью OpoInstall

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

  1. Беспрепятственное восстановление контекста: Передача пользовательских метаданных с веб-лендингов в нативные приложения без ручных реферальных кодов или сбора аппаратных идентификаторов.

  2. Кросс-платформенное управление контекстом кампаний: Управление кампаниями «веб-приложение» и мобильными кампаниями на разных платформах без необходимости создания нескольких сборок приложений.

  3. Строгое соответствие требованиям платформ: Работа исключительно в рамках изолированных сред приложений первой стороны и соблюдение ограничений конфиденциальности операционных систем.

Чтобы изучить шаблоны реализации для мобильных измерений и маршрутизации, обратитесь к документации OpoInstall или зайдите в консоль разработчика OpoInstall.

Резюме и фреймворк принятия решений

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

Современный фреймворк атрибуции объединяет передачу параметров первой стороны, API измерений, опосредованные платформами, и устойчивое извлечение через клиентский SDK. Развертывая архитектуры контекстной маршрутизации, мобильные команды поддерживают надежные пути конверсии из веба в приложение, оставаясь при этом в соответствии с требованиями платформ к конфиденциальности.

Связанные материалы

  • Концепции: Ограничения рекламных идентификаторов, Маршрутизация контекстных параметров, Install Referrer, AdAttributionKit, App Tracking Transparency

  • Технологии: API Google Play Install Referrer, Рекламный API служб Google Play, Фреймворк Apple ATT, Apple AdAttributionKit, Мобильный SDK OpoInstall

  • Вопросы безопасности: Минимизация мобильных данных, защита от повторного воспроизведения, безопасность передачи

  • API: API Google Play Install Referrer, API рекламных идентификаторов Google, API Apple App Tracking Transparency, API параметров установки OpoInstall

Официальная документация

Android

Apple

Атрибуция с сохранением конфиденциальности

Share this article