← Назад в блог
Гайд

Deferred deep linking без SDK: как это на самом деле устроено под капотом

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

14 августа 202611 минут

Контекст умирает на границе стора

Человек нажимает ссылку на /product/42. Приложение не установлено, и редирект отправляет его в стор. Он устанавливает, открывает приложение и попадает на общий главный экран. HTTP-запрос, нёсший его намерение, закончился на странице стора: свежеустановленное приложение стартует без URL, без cookie, без referrer. От клика не осталось ничего.

Перенос этого контекста через установку — это deferred deep linking, и стандартный ответ — «встройте MMP SDK». Многие команды такой ответ не устраивает — тред 772811 на Apple Developer Forums лишь один из многих с вопросом, как сделать это без стороннего SDK, — а после того как в августе 2026 AppsFlyer убрал deferred deep linking из бесплатного плана, спрашивающих стало больше. Так можно ли собрать это самому? На Android — да, чисто и официально. На iOS — отчасти, через обходные пути с реальной ценой.

Замечание о рамках: что такое deferred deep linking и когда он окупается, мы разбираем в отдельной статье. Этот пост — только про сантехнику: какой транспорт способен протащить токен через установку и насколько каждому можно доверять.

Что переживает установку, а что нет

С install referrerОбычная ссылка в сторконтекст потерянТапТапСторСторУстановкаУстановкаПервый запускПервый запуск
Верхняя полоса: токен едет в параметре referrer Play через стор и выходит с другой стороны при первом запуске. Нижняя полоса: обычная ссылка в стор — контекст клика исчезает, как только загрузилась страница стора.

Android: Install Referrer API — честная хорошая новость

Google Play решает задачу нативно. URL стора принимает параметр referrer, Play сохраняет эту строку вместе с установкой, а приложение после первого запуска читает её дословно через Install Referrer API. Это весь механизм: без фингерпринтинга, без буфера обмена, без угадываний.

Строго говоря, это не «ноль кода»: чтение значения требует библиотеки com.android.installreferrer — маленького артефакта, который локально общается с приложением Play Store. Она не делает сетевых вызовов, не является аналитическим SDK, звонящим домой, и ничего не добавляет к вашим декларациям приватности, кроме того, что вы сами сделаете со строкой.

Что класть в параметр — решать вам: ID ссылки, кампанию, закодированную цель диплинка. Держите его коротким и URL-encoded — referrer в play.google.com/store/apps/details?id=com.example&referrer=tok_8f2 вернётся ровно таким, каким был отправлен.

Полный цикл, от начала до конца

  1. 1При тапе редирект добавляет referrer=<token> к URL Play; токен указывает на контекст клика, сохранённый на вашем сервере.
  2. 2При первом запуске приложение подключает InstallReferrerClient и читает строку installReferrer.
  3. 3Приложение обменивает токен в вашем API на сохранённый контекст — путь диплинка, кампанию — и маршрутизирует пользователя.
  4. 4Сервер помечает токен использованным. Строка referrer остаётся на устройстве, поэтому одноразовость должна обеспечиваться на сервере.

Ограничения узкие и предсказуемые: API покрывает только установки, реально прошедшие через Google Play. Sideload, Huawei AppGallery и другие сторы referrer Play не несут, а значение стоит прочитать один раз вскоре после первого запуска.

iOS: официального аналога нет, три обходных пути по порядку

Apple не поставляет ничего похожего на Install Referrer. Страница App Store не проносит произвольные параметры через установку; всё ниже — обходные пути, построенные на этом отсутствии. От наименее плохого к самому нишевому:

Передача через буфер обмена

01 · средняя надёжность, за разрешением

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

Подвох появился с iOS 16: чтение буфера вызывает системный запрос на вставку. Пользователь видит «Разрешить вставку из Safari?» на первом же экране приложения, установленного тридцать секунд назад, и многие отказывают. Отказ — тихая потеря: его не отличить от «токена не было». UIPasteboard.detectPatterns может проверить паттерн без запроса, но не прочитать значение. К тому же буфер могут перезаписать между тапом и запуском. Работает измеримо часто, но вторая сторона монеты хорошо видна.

Вероятностный (fingerprint) матчинг

02 · низкая–средняя надёжность, враждебен приватности

В момент клика сервер записывает IP, модель устройства и версию ОС из user agent и метку времени. При первом запуске приложение вызывает ваш endpoint, который ищет клик с совпадающими сигналами в коротком окне, обычно меньше получаса. Токен не путешествует вовсе: совпадение — это догадка.

Мы описываем это потому, что вендоры это продают, а не потому, что вам стоит это строить. Сигналы деградируют: iCloud Private Relay маскирует IP, CGNAT ставит тысячи пользователей за один адрес, модели устройств — грубые корзины. Apple прямо не одобряет фингерпринтинг, а в эпоху privacy manifest сбор таких сигналов — то, что App Review может попросить обосновать. Точность падает с каждым годом, а ложные совпадения уводят реальных пользователей не на тот экран.

App Clips и другие нишевые пути

03 · надёжно, но узко

App Clip, вызванный по вашей ссылке, получает полный URL и после установки может передать контекст полному приложению через общий контейнер. В своей нише это самый надёжный путь на iOS — но он требует построить и поддерживать App Clip и подходит только там, где лёгкий мгновенный сценарий имеет смысл. Shared web credentials решают смежную задачу — непрерывность авторизации, а не общий контекст ссылки. Знать полезно, ответом бывает редко.

Паттерн проектирования, который работает при любом механизме

Какой бы транспорт ни нёс токен — строка referrer, буфер обмена или даже ID вероятностного совпадения — серверная архитектура одна и та же, и сделать её правильно важнее выбора транспорта. Не запихивайте весь диплинк в канал: храните контекст клика на сервере и передавайте только короткоживущий ключ.

01

Храните контекст под случайным токеном

При клике запишите {deep_link, кампания, метка времени} под коротким случайным токеном и положите в транспорт только токен. Полезная нагрузка мала, данные кампаний не оседают в буферах и логах, а смысл «контекста» можно менять, не трогая клиент.

02

Агрессивно истекайте

TTL в 30–60 минут покрывает реальный путь от тапа до установки. Отложенный маршрут, разрешённый через неделю после клика, чаще ошибается, чем попадает.

03

Обеспечьте одноразовость

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

04

Падайте в значение по умолчанию, а не в догадку

Нет токена, токен истёк, запрос на вставку отклонён — ведите пользователя на обычный главный экран. Обычный первый запуск слегка разочаровывает; попадание в чужую корзину — это тикет в поддержку.

Надёжность, сказанная честно

Грубые цифры от команд, эксплуатирующих эти механизмы в проде. Ваш микс источников, задержка установки и версия iOS аудитории сдвигают каждое число.

МеханизмПлатформаНадёжностьПримечания
Play Install ReferrerAndroidВысокаяОфициальный API, переживает отложенные установки, без запросов пользователю. Только установки из Play.
Токен в буфере обменаiOSСредняяУпирается в запрос вставки iOS 16+; отказы бесшумны; буфер волатилен.
Вероятностный матчингiOSНизкая–средняяIP + модель + временное окно. Деградирует при Private Relay и CGNAT; Apple не одобряет.
Передача через App ClipiOSВысокая, узкаяДетерминированно, но только для сценариев, оправдывающих App Clip.

Что это значит для вашего стека

Если отложенная маршрутизация нужна только на Android, вам нужно совсем немного: ссылка, добавляющая параметр referrer, маленькая библиотека и один endpoint обмена токенов. Это полдня работы, и это по-настоящему без SDK в том смысле, который важен: никакой сторонний код не наблюдает за вашими пользователями.

iOS — то место, где управляемые решения отрабатывают свою цену, потому что там обходные пути и есть продукт: поддерживать инфраструктуру матчинга, проектировать вокруг запроса вставки и отслеживать каждый релиз ОС, сдвигающий почву. Поэтому это и оценивается как инфраструктура — Appy предлагает deferred deep linking на уровне Enterprise, где эта поддержка — забота вендора, а не ваша.

Но будьте честны, какая у вас задача. Если на деле нужно, чтобы «пользователи с уже установленным приложением попадали на нужный экран», это стандартный deep linking — границы установки нет. Диплинк-прослойка Appy закрывает этот случай на плане Pro за $9,99 в месяц, с фолбэком в стор и по-прежнему без SDK. Прежде чем покупать тяжёлую машинерию, измерьте, какая доля воронки — действительно свежая установка с контекстом.

Частые вопросы

Работает ли Install Referrer при сканировании QR?

Да, если QR разрешается через ссылку, добавляющую параметр referrer к URL Play. Механизму всё равно, как начался клик — скан, тап или NFC — важно лишь, что URL стора нёс referrer в момент открытия Play. QR, указывающий на голый URL Play, не несёт ничего.

Почему мой подход с токеном в буфере внезапно сломался?

Почти наверняка запрос вставки iOS. С iOS 16 первое чтение буфера вызывает системный диалог разрешения, и заметная доля пользователей отказывает. Ваш код не деградировал; в вашем чтении теперь участвует человек. Проверьте, снизилась ли доля найденных токенов, а не упала ли в ноль — это и есть почерк проблемы.

Разрешён ли fingerprint-матчинг на iOS?

Это серая зона, и почва уходит из-под неё. Правила Apple запрещают фингерпринтинг для трекинга, privacy manifest требует декларировать собираемые сигналы, и App Review уже отклонял приложения за это. Некоторые вендоры всё ещё продают. Строите сами — риск ваш, и исходите из того, что точность продолжит падать.

Нужен ли мне deferred deep linking вообще?

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

Продолжить изучение

Гайд
14 мая 2026 г.
9 мин чтения

Deferred deep linking: как это работает и когда применять

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

deferred deep linking
install referrer
deep linking
mobile attribution
Читать статью
Туториал
10 окт. 2025 г.
12 мин чтения

Полное руководство по Universal Links для iOS и Android

Полное руководство по universal links, deep links и app links: внедрение и лучшие практики для mobile marketing.

universal links
deep linking
ios
android
Читать статью
Гайд
13 авг. 2026 г.
10 мин чтения

Link Tracking Protection в iOS 26: какие параметры URL выживают?

Safari удаляет click ID вроде gclid и fbclid, а UTM проходят. Что это значит для измерения установок и как first-party ссылки сохраняют атрибуцию.

ios 26
link tracking protection
utm parameters
attribution
Читать статью

Ищете другое? Посмотрите все темы в блоге.

Маршрутизируйте установки, которые уже заработали

Стандартные диплинки с фолбэком в стор на Pro, deferred deep linking на Enterprise — и то и другое без SDK в вашем приложении.

Начать с Appy