App Link — это механизм Android (Android 6.0+), который автоматически открывает веб-ссылки в установленном приложении, минуя диалог выбора. Термин ввёл Google в 2015 году вместе с Android 6.0 Marshmallow. По данным Android Developers, App Link использует Digital Asset Links — криптографическую верификацию через файл на сервере, подтверждающую, что домен принадлежит разработчику приложения.
Главное
App Link (Android App Link) — это стандартная HTTPS-ссылка, которая при переходе с Android-устройства автоматически открывает установленное приложение без показа стандартного диалога выбора между браузером и приложением. Google представил App Link в Android 6.0 (API 23) как решение проблемы «chooser dialog», который снижал конверсию deep link из-за дополнительного клика и путаницы пользователя.
Ключевое нововведение: верификация. Android проверяет, что домен действительно принадлежит разработчику приложения, через Digital Asset Links API. Google Play Store проверяет App Link при публикации и может отклонить апдейт, если верификация не пройдена. Это делает App Link безопаснее Custom URL Scheme: ни одно другое приложение не может перехватить ссылку на ваш домен.
Digital Asset Links — это открытый протокол, который Google использует не только для App Link, но и для связывания веб-сайтов с приложениями в поисковой выдаче, Google Assistant и Smart Lock for Passwords. Протокол основан на криптографической верификации: в assetlinks.json указывается SHA256 отпечаток сертификата подписи приложения, что исключает подделку.
Процесс работы App Link состоит из трёх этапов: верификация Digital Asset Links, обработка через Intent Filter и автоматический переход. Каждый этап обязателен. Если верификация не пройдена, Android показывает диалог выбора — такой deep link работает как обычный, но без преимущества автоматического перехода.
Asset Links — JSON-файл, размещаемый на сервере по адресу https://domain/.well-known/assetlinks.json. Файл содержит массив объектов с полями: relation (массив строк, описывающих тип связи), target (объект с namespace и package_name приложения, а также sha256_cert_fingerprints — массив SHA256 отпечатков сертификата подписи).
// assetlinks.json — минимальная конфигурация App Link
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
]
}
}]
SHA256 отпечаток получается из сертификата, которым подписано приложение. Для debug-сборки используется стандартный Android debug сертификат, для release — сертификат из Google Play Console или ваш собственный. Важно: при смене сертификата подписи (например, при переходе на App Signing by Google Play) необходимо обновить assetlinks.json на сервере, иначе App Link перестанет работать.
Android проверяет App Link при первом переходе по ссылке. Система загружает assetlinks.json с сервера, сверяет package_name и SHA256 отпечаток с сертификатом установленного приложения. Если данные совпадают, Android помечает Intent Filter как верифицированный, и все последующие ссылки на этот домен открываются автоматически, без диалога.
// AndroidManifest.xml — Intent Filter для App Link
<activity
android:name=".ui.ProductActivity"
android:exported="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="example.com"
android:pathPrefix="/product" />
</intent-filter>
</activity>
autoVerify="true" — обязательный атрибут, который указывает Android проверить assetlinks.json. Без этого атрибута Intent Filter не будет верифицирован, и App Link не активируется. Android поддерживает несколько Intent Filter в одной Activity — для разных хостов. Система проверяет каждый хост отдельно. Верификация выполняется асинхронно и может занимать до 20 секунд при первом переходе.
После успешной верификации Android автоматически открывает приложение при переходе по любой ссылке, подходящей под верифицированный Intent Filter. Пользователь не видит диалог выбора — приложение открывается мгновенно. Если приложение не установлено, ссылка открывается в браузере (как обычная веб-страница). Это идеальный пользовательский опыт: бесшовный переход без лишних действий.
Важно: автоматический переход работает только для https-схемы. App Link не поддерживает http (незащищённый протокол). Если пользователь вручную открывает http-ссылку (например, из SMS), Android не выполняет верификацию и показывает диалог выбора. Рекомендуется использовать https для всех ссылок, ведущих в приложение, и настроить HTTP → HTTPS редирект на сервере.
App Link — это эволюция Deep Link на Android, а не замена. Разница между ними фундаментальна. Обычный Deep Link (Custom URL Scheme) работает через Intent Filter с кастомной схемой (myapp://) и без autoVerify. Android не проверяет, действительно ли приложение связано с этой схемой — любое приложение может зарегистрировать myapp:// и перехватывать ссылки.
App Link решает три проблемы Deep Link. Первая: безопасность — верификация через Digital Asset Links исключает перехват ссылок. Вторая: пользовательский опыт — отсутствие диалога выбора повышает конверсию в целевое действие на 20–40%. Третья: индексация — Google индексирует https-ссылки App Link и может показывать их в поисковой выдаче как ссылки на контент внутри приложения.
Совместимость: App Link работает на Android 6.0+ (99% устройств). Для Android 5.x (Lollipop) используется обычный Deep Link с диалогом выбора. Поэтому рекомендуется поддерживать оба механизма: App Link для современных устройств и Custom URL Scheme как fallback для старых версий. Intent Filter с autoVerify="true" не ломает обратную совместимость — на Android < 6 атрибут игнорируется.
| Характеристика | Deep Link | App Link |
|---|---|---|
| Схема | Кастомная (myapp://) | HTTPS (https://domain) |
| Верификация | Нет | assetlinks.json |
| Диалог выбора | Показывается | Автоматический переход |
| Android версия | API 1+ | API 23+ (6.0+) |
| Индексация Google | Нет | Да (https URL) |
Настройка App Link требует трёх шагов: конфигурация Intent Filter в манифесте, размещение assetlinks.json на сервере и проверка верификации. Первый шаг — добавить в AndroidManifest.xml Intent Filter с android:autoVerify="true". Важно указать https-схему, хост и пути, которые должно обрабатывать приложение. Пути могут содержать wildcard (*) для подпапок.
Второй шаг — создание assetlinks.json. Файл можно сгенерировать через Android Studio (Tools → App Links Assistant). Ассистент также помогает с отладкой и тестированием. Файл размещается на сервере по пути /.well-known/assetlinks.json. Сервер должен отдавать Content-Type: application/json и быть доступен по HTTPS без редиректов. Google Play Console также показывает статус верификации App Link в разделе Publishing.
Тестирование — третий шаг. Используйте adb для проверки: команда adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/product/42" открывает приложение. Если вместо приложения открывается браузер — проверьте assetlinks.json и autoVerify. Android Studio App Links Assistant содержит встроенный тестер: он показывает статус верификации для каждого домена и пути. Для автоматического тестирования используйте Android Testing Library с Intent Matcher.
Android 12 (API 31) внёс изменения в обработку App Link. Добавлена новая домен-специфичная верификация: система проверяет каждую ссылку отдельно, а не весь Intent Filter. Это повышает безопасность, но требует обновления файла assetlinks.json при добавлении новых путей. Android 12 также ввёл Android App Links Assistant в комплекте с ADB — команды для управления верификацией через shell.
Несколько доменов — типичный сценарий для продакшена. Приложение может обрабатывать ссылки с example.com, m.example.com и example.org. Для каждого домена нужен отдельный assetlinks.json на соответствующем сервере. В манифесте добавляется несколько Intent Filter — по одному на домен. Все домены должны быть доступны по HTTPS и проходить верификацию независимо.
App Link и Jetpack Navigation — рекомендуемый способ обработки App Link в современных Android-приложениях. Jetpack Navigation поддерживает декларативные deep link в nav_graph.xml или через NavDeepLinkRequest. Это упрощает навигацию: разработчик описывает, какой экран открывается по определённому URL, а Navigation компонент сам обрабатывает Intent и восстанавливает стэк навигации. Google рекомендует использовать именно Jetpack Navigation для App Link.
// Обработка App Link через Jetpack Navigation
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handleDeepLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleDeepLink(intent)
}
private fun handleDeepLink(intent: Intent) {
intent.data?.let { uri ->
navController.handleDeepLink(NavDeepLinkRequest
.Builder
.fromUri(uri)
.build()
)
}
}
}
Google Play Store проверяет App Link при публикации. Если в манифесте указан Intent Filter с autoVerify, но assetlinks.json недоступен или неверен, Google Play может отклонить апдейт с предупреждением. В консоли разработчика (Policy and Programs → App Links) отображается статус верификации каждого домена. Перед публикацией обязательно проверяйте статус — исправление после отклонения апдейта задерживает релиз.
Часто задаваемые вопросы
App Link — это Deep Link с верификацией через Digital Asset Links. Основные отличия: App Link использует https-схему вместо кастомной, не показывает диалог выбора и индексируется Google. Обычный Deep Link работает на всех версиях Android, но требует ручного выбора приложения.
Файл размещается в корне HTTPS-сервера по пути /.well-known/assetlinks.json. Сервер должен отдавать Content-Type: application/json. Файл нужно обновлять при смене сертификата подписи или добавлении новых доменов.
Основные причины: отсутствует android:autoVerify="true" в Intent Filter, assetlinks.json недоступен по HTTPS, неверный SHA256 отпечаток, другой сертификат подписи (debug vs release). Проверьте через adb shell dumpsync domain_verification статус верификации.
Нет — для App Link требуется HTTPS-сервер с доступным assetlinks.json. Если у вас нет домена, используйте Firebase Hosting или GitHub Pages для хостинга файла. Альтернатива: Custom URL Scheme (без верификации) или Firebase Dynamic Links.
Нет — App Link поддерживается на Android 6.0 (API 23) и выше. На Android 5 Intent Filter с android:autoVerify="true" игнорирует атрибут и работает как обычный Deep Link с диалогом выбора. Рекомендуется поддерживать оба механизма для обратной совместимости.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также