Диплинки в приложениях: настройка Universal Links и App Links
Практика3 минРедакция Innovialabs
Коротко
Для надёжных диплинков используйте обычные https-ссылки, подтверждённые файлом на вашем домене: Universal Links на iOS и App Links на Android. URI-схемы вроде myapp:// оставьте как запасной вариант.
Коротко: какие бывают диплинки
Диплинк — ссылка, которая открывает не главный экран, а конкретное место в приложении: товар, заказ, профиль. Есть два принципиально разных способа.
URI-схема (myapp://) | Проверенная ссылка (https://) | |
|---|---|---|
| Пример | myapp://product/42 | https://example.com/product/42 |
| Если приложение не установлено | Ошибка или ничего не происходит | Открывается сайт |
| Кто может перехватить | Любое приложение с той же схемой | Только приложение, подтверждённое доменом |
| Поддержка в мессенджерах и почте | Часто не кликабельна | Обычная ссылка |
Вывод: основная ссылка — https, а URI-схему оставьте для внутренних переходов и интеграций.
Universal Links на iOS
- В Xcode добавьте capability Associated Domains с записью
applinks:example.com. - Разместите файл
apple-app-site-association(без расширения) по адресуhttps://example.com/.well-known/apple-app-site-association. - Обработайте входящий URL в приложении и откройте нужный экран.
{
"applinks": {
"details": [
{
"appIDs": ["TEAMID.com.example.app"],
"components": [{ "/": "/product/*" }]
}
]
}
}
Требования к файлу: HTTPS без редиректов, корректный JSON, доступ без авторизации. Apple получает файл через свой CDN, поэтому изменения применяются не мгновенно.
App Links на Android
- В
AndroidManifest.xmlдобавьте intent-filter сandroid:autoVerify="true", схемойhttpsи вашим доменом. - Разместите
assetlinks.jsonпо адресуhttps://example.com/.well-known/assetlinks.json.
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": ["AA:BB:..."]
}
}]
Частая ловушка — отпечаток сертификата. Если используется Play App Signing, нужен SHA-256 ключа подписи из Play Console, а не только вашего upload-ключа. Иначе ссылки работают в debug, но не в версии из магазина.
Отложенные диплинки для новых установок
Deferred deep link — сценарий, когда у человека нет приложения: он нажимает ссылку, попадает в магазин, ставит приложение и при первом запуске оказывается на нужном экране.
Нативно ни iOS, ни Android этого полностью не решают:
- На Android можно передать параметры через Play Install Referrer API.
- На iOS прямого механизма нет. Обычно используют сервисы атрибуции и диплинков (Branch, AppsFlyer, Adjust) или собственный бэкенд, который сопоставляет клик и первую установку.
Для промо, рефералок и рекламных кампаний отложенные диплинки почти обязательны: без них пользователь после установки видит главный экран и теряет контекст.
Как тестировать
- iOS-симулятор:
xcrun simctl openurl booted "https://example.com/product/42". - Android:
adb shell am start -a android.intent.action.VIEW -d "https://example.com/product/42"иadb shell pm get-app-links com.example.appдля проверки статуса верификации. - Реальные каналы. Проверьте ссылку в каждом месте, откуда придут пользователи:
- email — сервисы рассылок оборачивают ссылки в трекинговый редирект, и ссылка открывается в браузере. Подключите трекинговый домен к приложению или отключите обёртку для диплинков;
- реклама — рекламные сети тоже добавляют редиректы;
- мессенджеры и соцсети — встроенные браузеры (Instagram, Telegram и другие) могут открыть сайт вместо приложения.
Учтите особенности iOS: ссылка, вставленная в адресную строку Safari, приложение не откроет — только нажатие. Переход по ссылке внутри того же домена тоже останется в браузере.
Частые ошибки
- Файл ассоциации отдаётся с редиректом или требует авторизацию.
- В
assetlinks.jsonуказан не тот отпечаток сертификата. - Приложение открывается, но не обрабатывает путь и показывает главный экран.
- Нет fallback-страницы на сайте для тех, у кого приложения нет.