Простой случай

Диплинк — это 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 ссылку до появления полного приложения способен перехватить и передать её через общий контейнер. На Android параметры кампании при первом запуске детерминированно отдаёт API . Firebase Dynamic Links раньше прятал оба за одним SDK и закрылся в августе 2025 года — поэтому вопрос снова открыт, а не решён.

Два обходных пути, которые выглядят проще, стоит назвать, чтобы от них отказаться. Фингерпринтинг устройства сопоставляет браузер и приложение по IP, размеру экрана и локали в пределах короткого временного окна; он плохо работает в общих и операторских сетях, а вероятностное сопоставление пользователей — ровно тот приём, против которого направлены правила приватности платформ. Сопоставление через буфер обмена копирует нагрузку и читает её на запуске; с iOS 14 пользователю показывается баннер о вставке, а любое другое копирование в промежутке нагрузку уничтожает. И то и другое — догадки, выдаваемые за инфраструктуру.

Где это ломается на практике

  • Файл-ассоциация. Редирект, неверный content type или залежавшийся кеш — и платформа тихо перестаёт признавать вашу заявку. Симптом — не ошибка, а ссылки, открывающие сайт вместо приложения: это легко не заметить при тестировании и дорого в проде.
  • Встроенные браузеры. Ссылки, нажатые внутри соцсетей, часто открываются во встроенном webview, который вообще не передаёт управление ОС, — universal link, работающий из мессенджера, из ленты не делает ничего.
  • Нет веб-фолбэка. Если за https://-адресом нет настоящей страницы, все, у кого нет приложения, получают 404 — ровно та аудитория, которую вы пытались привести.
  • Атрибуция. Если реферер не переживает установку, понять, какая кампания дала какого пользователя, невозможно, и цифры привлечения, которые вы показываете, — оценки.

Когда это стоит хлопот

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

Стоит не всегда. Приложению, вся ценность которого и так за логином, куда все всё равно доходят, или продукту без шеринга и без платного привлечения можно выйти без отложенной обработки и ничего не потерять. Цена реальна: таргет — это второй бинарник, который надо собирать, подписывать и держать в пределах 15 МБ.

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