Простой случай
Диплинк — это URL, называющий место внутри приложения, а не страницу в вебе: товар, приглашение, ветку переписки, сброс пароля. Если приложение установлено, операционная система отдаёт ссылку ему, и оно открывает нужный экран вместо того, чтобы браузер открыл страницу.
Механизма два, и они не взаимозаменяемы.
Собственные URL-схемы — myapp://product/42 — форма постарше. Любое приложение может заявить любую схему, и никто эту заявку не проверяет, так что два приложения могут драться за одну и ту же. Хуже другое: за пределами устройства такой URL не значит ничего. Без установленного приложения нажатие не ведёт никуда, и опубликовать его там, где ссылку может открыть браузер, нельзя. Схемы остаются уместны для передачи управления между приложениями на одном устройстве; как основа для ссылок, которые вы отправляете людям, они плохи.
Universal Links на iOS и App Links на Android — обычные https://-адреса, права на которые приложение заявляет файлом-ассоциацией со своего домена: apple-app-site-association и assetlinks.json соответственно. Платформа скачивает этот файл и проверяет заявку, поэтому перехватить ваши ссылки нельзя, а тот же самый URL продолжает работать как веб-страница для всех, у кого приложения нет. Строить нужно на этой форме.
Три разные вещи, которые называют «диплинком»
| Что делает | Если приложение не установлено | |
|---|---|---|
| Своя схема | Открывает экран через приватный myapp:// | Ничего не происходит — ссылка в никуда |
| Universal / App Link | Открывает экран через проверенный https:// | Откроется ваша веб-страница |
| Отложенный диплинк | Открывает экран после установки | Уводит в магазин, а на первом запуске восстанавливает адрес назначения |
Большинство споров о диплинках — это ситуация, когда один человек говорит про одно из трёх, а слышат другое. Первые два — вопрос конфигурации. Третий — настоящая инженерная задача.
Сложный случай: пережить установку
Всё выше предполагает, что приложение уже стоит. Если нет, нажатие уводит пользователя в App Store или Google Play, а запускается в итоге свежая установка, ничего не помнящая о том, на что нажимали. Человек оказывается на безликой главной, и то, чего он хотел, потеряно.
Отложенный диплинкинг — это та часть, которая переносит адрес назначения через разрыв, и сложна она по конкретной причине: между нажатием и первым запуском нет общего состояния. Только что установленное приложение никогда не видело той сессии браузера, с которой всё началось, так что полезную нагрузку приходится протаскивать через границу ОС, построенную ровно для того, чтобы этого не позволять.
Механизмы платформенные. На iOS ссылку до появления полного приложения способен перехватить App Clips и передать её через общий контейнер. На Android параметры кампании при первом запуске детерминированно отдаёт API install referrer. Firebase Dynamic Links раньше прятал оба за одним SDK и закрылся в августе 2025 года — поэтому вопрос снова открыт, а не решён.
Два обходных пути, которые выглядят проще, стоит назвать, чтобы от них отказаться. Фингерпринтинг устройства сопоставляет браузер и приложение по IP, размеру экрана и локали в коротком окне; он плохо работает в общих и операторских сетях, а вероятностное сопоставление пользователей — ровно тот приём, против которого направлены правила приватности платформ. Сопоставление через буфер обмена копирует нагрузку и читает её на запуске; с iOS 14 пользователю показывается баннер о вставке, а любое другое копирование в промежутке нагрузку уничтожает. И то и другое — догадки, выдаваемые за инфраструктуру.
Где это ломается на практике
- Файл-ассоциация. Редирект, неверный content type или залежавшийся кеш — и платформа тихо перестаёт признавать вашу заявку. Симптом — не ошибка, а ссылки, открывающие сайт вместо приложения: это легко не заметить на тестировании и дорого в проде.
- Встроенные браузеры. Ссылки, нажатые внутри соцсетей, часто открываются во встроенном webview, который вообще не передаёт управление ОС, — universal link, работающий из мессенджера, из ленты не делает ничего.
- Нет веб-фолбэка. Если за
https://-адресом нет настоящей страницы, все, у кого нет приложения, получают 404 — ровно та аудитория, которую вы пытались привести. - Атрибуция. Если реферер не переживает установку, понять, какая кампания дала какого пользователя, невозможно, и цифры привлечения, которые вы показываете, — оценки.
Когда это стоит хлопот
Ссылка, высаживающая человека на безликую главную, тратит впустую единственный момент намерения, который вам достался. Расшаренный контент, приглашения, сброс пароля и любая платная кампания держатся на том, что адрес назначения переживает дорогу, — как и понимание того, сколько вы заплатили за установку.
Стоит не всегда. Приложению, вся ценность которого и так за логином, куда все всё равно доходят, или продукту без шеринга и без платного привлечения можно выйти без отложенной обработки и ничего не потерять. Цена реальна: цель App Clips — это второй бинарник, который надо собирать, подписывать и держать в пределах 15 МБ.
Полную реализацию — обе платформы и очередь отложенных ссылок, которая ждёт логина, прежде чем выполнить переход, — мы разобрали в статье отложенный диплинкинг после Firebase Dynamic Links.