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) като решение на проблема с „диалоговия прозорец за избор“, който намаляваше конверсията на 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://домейн/.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 като резервен вариант за по-стари версии. Intent Filter с autoVerify="true" не нарушава обратната съвместимост — на Android < 6 атрибутът се игнорира.
| Характеристика | Deep Link | App Link |
|---|---|---|
| Схема | Персонализирана (myapp://) | HTTPS (https://домейн) |
| Потвърждение | Не | assetlinks.json |
| Диалогов прозорец | Показва се | Автоматично пренасочване |
| Версия на Android | API 1+ | API 23+ (6.0+) |
| Индексиране от Google | Не | Да (HTTPS URL) |
Настройката на App Link изисква три стъпки: конфигуриране на Intent Filter в манифеста, поставяне на assetlinks.json на сървъра и проверка на потвърждението. Първа стъпка — добавяне на Intent Filter с android:autoVerify="true" в AndroidManifest.xml. Важно е да посочите HTTPS схемата, хоста и пътищата, които приложението трябва да обработва. Пътищата могат да съдържат заместващ знак (*) за подпапки.
Втора стъпка — създаване на 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 срещу 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също