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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також