Deep Linking в мобильных приложениях: Universal Links и App Links
В этой статье разбираем deep linking в мобильных приложениях: как работают Universal Links на iOS и App Links на Android, что нужно для корректной маршрутизации, как подключить deferred deep linking и атрибуцию, а также какие инструменты использовать для быстрой и надёжной реализации.
Зачем бизнесу deep linking и как он работает
Deep link — это ссылка, которая открывает не просто приложение, а конкретный экран, состояние или контент внутри него. Для продукта это:
- рост конверсии: меньше шагов между кликом и целевым действием;
- связка рекламы, e-mail, соцсетей и пушей с точными точками входа;
- персонализация онбординга и повторных визитов;
- измеримость: отслеживание источников и кампаний.
В вебе этот паттерн решён давно, в мобайле ключ к надёжности — доменно подтверждённые ссылки: Universal Links в iOS и App Links в Android. Они исключают всплывающие диалоги, не перехватываются сторонними приложениями и работают предсказуемо из браузеров и мессенджеров.
Universal Links (iOS): архитектура и настройка
Universal Links — это HTTP(S)-ссылки на ваш домен, которые iOS ассоциирует с приложением.
- Домены: включите Associated Domains (applinks:example.com) в настройках таргета.
- Файл apple-app-site-association (AASA):
- JSON без расширения, доступен по HTTPS: /.well-known/apple-app-site-association или в корне домена.
- Содержит appID (TeamID.BundleID) и пути, которые маппятся на ваше приложение.
- Обработка: реализуйте метод сцен/делегата, чтобы получать NSUserActivity с activityType = NSUserActivityTypeBrowsingWeb.
- Fallback: если приложения нет или ссылка не подтверждена, откроется веб-страница.
- Нюансы:
- Один домен может быть привязан к нескольким приложениям; следите за приоритетом путей.
- AASA кэшируется; при изменениях учитывайте задержку распространения.
- Некоторые мессенджеры открывают встроенный WebView — тестируйте сценарии.
App Links (Android): устройство и верификация
App Links — доменные HTTP(S)-ссылки, подтверждённые сайтом и приложением.
- В манифесте добавьте intent-filter с action VIEW, category BROWSABLE/DEFAULT, scheme https и host. Для автоподтверждения используйте android:autoVerify="true".
- На домене разместите /.well-known/assetlinks.json с записью, указывающей пакет и SHA-256 отпечатки подписей (release и debug при необходимости).
- После верификации ссылки открываются сразу в вашем приложении без диалога «Открывать всегда?».
- Обработка: извлекайте Intent data (URI), парсите путь/параметры и передавайте в навигацию.
- Fallback: при отсутствии приложения система откроет ссылку в браузере.
Схемные deeplink-и: когда уместны
Кастомные схемы (myapp://screen?id=123) просты, но уступают доменным решениям:
- конфликтуют между приложениями с одинаковым именем схемы;
- часто перехватываются, показывают системные диалоги;
- хуже работают из некоторых источников (встроенные веб‑просмотры).
Используйте схемы как внутренний протокол и для обратной связи из OAuth/платёжных SDK, а для внешнего трафика — Universal Links/App Links.
Deep linking в мобильных приложениях: базовые принципы маршрутизации
Надёжный слой маршрутизации — это:
- Единый роутер: декодирует URI, валидирует параметры, решает, какой экран открыть, и формирует Navigation Intent/Route.
- Идемпотентность: повторный клик не дублирует действия (например, повторный пуш не открывает один и тот же модальный стек).
- Холодный/тёплый старт: храните непроцессированные ссылки до инициализации навигации (очередь событий), учитывайте авторизацию.
- Авторизация и доступ: защищённые экраны открывайте только после логина, перенаправляя на целевой экран после успешной аутентификации.
- Веб‑фолбэки: для ссылок без установленного приложения предусмотрите эквивалентные веб‑страницы.
Deferred deep linking: как доставить пользователя в нужное место после установки
Deferred deep linking передаёт контекст клика через установку приложения.
- Android: Play Install Referrer API позволяет получить реферальные параметры после первого запуска и восстановить целевую ссылку.
- iOS: deferred реализуется через сторонние платформы (например, Firebase Dynamic Links, Branch). Они сохраняют контекст клика на стороне сервера и сопоставляют его первому запуску приложения.
- Практика:
- Шифруйте и минимизируйте данные в ссылках; храните минимум, необходимый для маршрутизации и атрибуции.
- Тайм‑ауты и ретраи: учитывайте задержки между установкой и доставкой контекста.
- Фолбэки: если deferred не сработал, покажите релевантный онбординг.
UTM для deep link и атрибуция мобильного трафика
UTM‑метки помогают анализировать каналы в единой модели. Рекомендации:
- Храните utm_source, utm_medium, utm_campaign, utm_content, utm_term в параметрах ссылки. Для Universal/App Links используйте обычный query string.
- На старте приложения считывайте параметры и синхронизируйте с аналитикой (AppMetrica, Firebase Analytics, Amplitude и др.).
- Не смешивайте уровни атрибуции: первичная (клик/установка) — в MMP/динамических ссылках; вторичная (внутриприложечные события) — в продуктовой аналитике.
- Сопоставляйте веб и мобайл: при кросс‑платформенных сценариях прокидывайте идентификатор сессии/пользователя через ссылку и сшивайте в CDP/сквозной аналитике.
Инструменты: Firebase Dynamic Links и Branch.io
Оба сервиса решают задачи генерации коротких доменных ссылок, кросс‑платформенности и deferred.
- Firebase Dynamic Links:
- Интеграция с Firebase Analytics, бесплатный базовый функционал.
- Генерация коротких ссылок, поддержка iOS/Android, кастомные домены.
- Простая настройка, но ограниченная детализация атрибуции по сравнению с MMP.
- Branch.io:
- Сильная атрибуция, глубокая интеграция с рекламными сетями и антифрод‑механизмами.
- Гибкая маршрутизация, лендинги, QR‑коды, богатые параметры, удобные SDK.
- Коммерческая модель, но масштабные проекты часто окупают удобством отчётности и стабильностью deferred.
Выбор зависит от стека и требований к отчётности. Для старта нередко достаточно Firebase; для сложной мультиканальной атрибуции — Branch.
Безопасность, приватность и качество трафика
- Доменная верификация: используйте только HTTPS, храните AASA/assetlinks.json под контролем DevOps.
- Подписи и ключи: на Android в assetlinks.json добавляйте только актуальные SHA-256 сертификатов (release); отзовите старые при ротации ключей.
- Валидация URI: отбрасывайте неизвестные пути и подозрительные параметры; лимитируйте длину и набор разрешённых значений.
- Конфиденциальность: не передавайте PII в query‑параметрах; используйте серверные токены/идентификаторы.
- Антифрод: отслеживайте аномалии кликов, защиту от фарминга deferred, фильтруйте ботов по паттернам и источникам.
Тестирование и отладка: что проверить до релиза
- iOS:
- Убедитесь, что AASA доступен и валиден (проверка JSON и заголовков Content-Type: application/json).
- Тест на физическом устройстве: удалите приложение, установите заново, проверьте холодный/тёплый старт.
- Проверьте открытие из Safari, из встроенных WebView и из популярных мессенджеров.
- Android:
- Проверка assetlinks.json и статуса верификации (adb shell pm verify-app-links, экраны выбора по умолчанию).
- Холодный/тёплый старт, сценарии без сети, повторные клики.
- Deferred:
- Клик по ссылке → установка → первый запуск. Верифицируйте передачу параметров и тайминги.
- Многоканальные кампании: разные utm, корректная атрибуция и дедупликация.
- Аналитика:
- Сопоставление кликов, установок и событий в MMP/аналитике.
- Корректность пользовательских свойств/идентификаторов.
Типовые ошибки и как их избежать
- Неправильные пути в AASA/assetlinks.json → часть ссылок не открывается: указывайте явные префиксы и тестируйте wildcard‑маски.
- Конфликт с веб‑редиректами: серверные 301/302 должны сохранять домен и путь, который ожидает приложение.
- Полагание только на схемы: внешние кампании ведите через Universal/App Links; схемы оставьте для SDK и внутренних переходов.
- Потеря контекста на авторизации: храните deeplink‑состояние в безопасном кеше до завершения логина.
- Слишком «толстые» ссылки: используйте сжатие параметров или серверные резолверы.
Интеграция deep linking с маркетингом и продуктом
- Реклама: каждая креативная гипотеза — свой deeplink на конкретный оффер/экран.
- E-mail/SMS/мессенджеры: персональные ссылки с метками для сегментов.
- Онбординг: разный первый экран под источник (контент, промо, реферал).
- Повторные продажи: ссылки из пушей на корзину, избранное, оплату.
- Сквозная аналитика: соединяйте данные из MMP и веб‑аналитики, стройте когортные отчёты.
Для внедрения в боевых продуктах важно планировать deep linking одновременно с разработкой приложения. Если вы на этапе проектирования или апгрейда, подключение специалистов ускорит релиз и снизит технический долг. Мы делаем комплексные Мобильные приложения, в том числе Сервисные приложения для клиентов и Корпоративные мобильные приложения, сразу закладывая корректную маршрутизацию, атрибуцию и тестирование deeplink‑ов.
Дополнительные материалы
- Для стратегического фреймворка маркетинга посмотрите «
». - Про рост мобильных продуктов в смежной нише — «
».
Чек‑лист внедрения deep linking
- Определены сценарии переходов и экраны назначения.
- Выбран подход: Universal Links (iOS) и App Links (Android), схемы — только для внутренних задач.
- Подготовлены и размещены AASA и assetlinks.json; домены подтверждены.
- Реализован единый роутер и обработка холодного/тёплого старта, очереди событий.
- Настроены fallback‑страницы и поведение без установленного приложения.
- Подключён deferred deep linking (Firebase Dynamic Links / Branch.io / MMP).
- Согласована UTM‑схема, параметры считываются и отправляются в аналитику.
- Покрыты сценарии авторизации и доступа к защищённым экранам.
- Написаны автотесты/чек‑кейсы, проведено кросс‑девайс/кросс‑канальное тестирование.
- Настроен мониторинг ошибок, логирование URI и аномалий кликов.
Итоги
Deep linking — база для управляемых пользовательских сценариев в мобайле. Доменные ссылки (Universal Links и App Links) дают предсказуемость, а корректная маршрутизация, deferred и атрибуция — измеримость и рост конверсии. Если нужно спроектировать или модернизировать стек переходов под ваш продукт — напишите нам: спроектируем архитектуру, внедрим и проверим на проде.


