Перейти к содержанию
Innovialabs

Диплинки в приложениях: настройка Universal Links и App Links

Практика3 мин

Коротко

Для надёжных диплинков используйте обычные https-ссылки, подтверждённые файлом на вашем домене: Universal Links на iOS и App Links на Android. URI-схемы вроде myapp:// оставьте как запасной вариант.

Коротко: какие бывают диплинки

Диплинк — ссылка, которая открывает не главный экран, а конкретное место в приложении: товар, заказ, профиль. Есть два принципиально разных способа.

URI-схема (myapp://)Проверенная ссылка (https://)
Примерmyapp://product/42https://example.com/product/42
Если приложение не установленоОшибка или ничего не происходитОткрывается сайт
Кто может перехватитьЛюбое приложение с той же схемойТолько приложение, подтверждённое доменом
Поддержка в мессенджерах и почтеЧасто не кликабельнаОбычная ссылка

Вывод: основная ссылка — https, а URI-схему оставьте для внутренних переходов и интеграций.

  1. В Xcode добавьте capability Associated Domains с записью applinks:example.com.
  2. Разместите файл apple-app-site-association (без расширения) по адресу https://example.com/.well-known/apple-app-site-association.
  3. Обработайте входящий URL в приложении и откройте нужный экран.
{
  "applinks": {
    "details": [
      {
        "appIDs": ["TEAMID.com.example.app"],
        "components": [{ "/": "/product/*" }]
      }
    ]
  }
}

Требования к файлу: HTTPS без редиректов, корректный JSON, доступ без авторизации. Apple получает файл через свой CDN, поэтому изменения применяются не мгновенно.

  1. В AndroidManifest.xml добавьте intent-filter с android:autoVerify="true", схемой https и вашим доменом.
  2. Разместите 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-страницы на сайте для тех, у кого приложения нет.

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

Не обязательно, но она полезна для переходов между своими приложениями, OAuth-редиректов и некоторых SDK. Для публичных ссылок используйте https.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.