QRkoder

App Link (Android)

App Link — механизм Android 6.0+ для открытия установленного приложения по HTTPS-ссылке без диалога выбора. Настраивается через assetlinks.json и autoVerify.

Определение App Link

App Link — встроенный механизм Android (появился в версии 6.0 Marshmallow, 2015) для автоматического открытия приложения по обычной HTTPS-ссылке. Когда пользователь нажимает на URL или сканирует QR-код, система проверяет: есть ли установленное приложение, которое «владеет» этим доменом. Если да — открывается приложение напрямую, без системного диалога «Выберите приложение» и без браузера.

До Android 6.0 разработчики использовали custom URI-схемы вроде myapp://product/123. Главная проблема: любое стороннее приложение могло объявить ту же схему, что создавало конфликты и диалоги выбора. App Link решает это через верификацию владения доменом — никто не может выдать себя за ваш HTTPS-домен.

Аналог технологии на iOS — Universal Link. Оба механизма преследуют одну цель, но настраиваются по-разному и не совместимы друг с другом.

Как настроить assetlinks.json

Настройка требует двух вещей: файла на сервере и флага в манифесте приложения.

1. Файл assetlinks.json размещается строго по адресу https://ваш-домен.ru/.well-known/assetlinks.json. Файл должен отдаваться с MIME-типом application/json, без редиректов, без авторизации. Содержимое — массив объектов с SHA-256 fingerprint подписи вашего APK:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.app",
    "sha256_cert_fingerprints": ["AA:BB:CC:..."]
  }
}]

SHA-256 fingerprint берётся из подписи APK командой keytool -printcert -jarfile release.apk. Для отладочной сборки и продакшн-ключа fingerprint разный — обычно добавляют оба в массив.

2. Флаг в AndroidManifest.xml. В <intent-filter> добавляется android:autoVerify="true":

<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="https" android:host="ваш-домен.ru" />
</intent-filter>

При установке приложения Android автоматически обращается к файлу assetlinks.json и верифицирует связку домен–приложение. Если верификация прошла — система запоминает, что этот домен «принадлежит» приложению, и больше не показывает диалоги.

Проверить результат можно через инструмент Digital Asset Links в Google Search Console или командой ADB: adb shell am start -a android.intent.action.VIEW -d "https://ваш-домен.ru/path".

App Link vs Intent URI vs Custom Scheme

Три способа открыть приложение из внешней ссылки принципиально отличаются поведением:

  • Custom URI-схема (myapp://): самый простой вариант, но не работает если приложение не установлено — вместо fallback браузер просто выдаёт ошибку. Плюс любое приложение может перехватить схему.
  • Intent URI (intent://...): специфично для Android, позволяет передать параметры и задать fallback-URL. Не поддерживается браузерами напрямую — нужен JavaScript-обёртка или специальная страница-роутер.
  • App Link: обычная HTTPS-ссылка. Работает в браузере, QR-кодах, email, мессенджерах. Если приложение не установлено — пользователь просто попадает на веб-страницу (хороший fallback). Верификация через assetlinks.json исключает конфликты.

Для QR-кодов App Link — оптимальный выбор: в QR зашивается обычный HTTPS-URL. Пользователь с установленным приложением попадает в него напрямую, остальные видят веб-страницу. Один QR-код работает для всех. Подробнее — в материале про deep link vs QR.

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

В чём разница между App Link и deep link?

Deep link — общее название для любого механизма, открывающего конкретный экран приложения. App Link — конкретная реализация deep link на Android через HTTPS-URL и верификацию assetlinks.json. Можно сказать, что App Link — это разновидность deep link, но не наоборот: deep link может быть реализован и через custom scheme, и через intent URI, и через App Link.

Что произойдёт, если пользователь не установил приложение?

Android откроет HTTPS-URL в браузере как обычную страницу. Это называется graceful fallback — один из главных плюсов механизма. Хорошая практика: на веб-странице разместить кнопку «Скачать приложение» со ссылкой на Google Play, чтобы конвертировать такого пользователя в установку.

Работает ли App Link с динамическими QR-кодами?

Да, и это один из лучших сценариев. В динамический QR зашивается постоянный HTTPS-URL на верифицированном домене. При сканировании Android видит знакомый домен и открывает приложение без диалогов. Если URL меняется (динамический редирект), главное — чтобы домен оставался тем же, который прописан в assetlinks.json.

Можно ли добавить несколько доменов в один App Link?

Да. В AndroidManifest.xml можно перечислить несколько <data android:host=...> в одном intent-filter, а также добавить несколько отдельных intent-filter с разными доменами. Для каждого домена должен быть свой файл assetlinks.json. Это удобно, если приложение обслуживает несколько брендов или субдоменов.

Как быстро Android верифицирует assetlinks.json после установки?

Верификация происходит при установке приложения: система делает сетевой запрос к каждому домену из intent-filters с autoVerify. Если устройство было офлайн при установке — верификация повторяется при первом подключении к сети. До успешной верификации система показывает диалог выбора приложения, как в Android 5.x.

Нужен ли специальный QR-код для App Link?

Нет. В QR зашивается обычный HTTPS-URL — тот же, что вы указали в intent-filter манифеста. Любой генератор QR-кодов подходит. Специального формата нет: Android реагирует на URL-домен, а не на тип QR.

Создавайте QR-коды бесплатно

Динамические QR-коды с аналитикой, дизайном и без ограничений по сканированиям.

Начать бесплатно