Как настроить переходы из браузера в Android‑приложение (Deep Links и App Links)
Короткий ответ: добавьте в activity intent‑фильтр с https‑хостом и android:autoVerify="true", разместите файл assetlinks.json на сайте в /.well-known/, обработайте intent в коде и протестируйте через adb и браузер.
Шаги настройки (быстро)
- В AndroidManifest.xml у activity добавьте intent‑фильтр с https‑data и android:autoVerify="true".
- На сайте разместите файл /.well-known/assetlinks.json с указанием packageName и SHA256‑сертификата.
- Обработайте intent.getData() в Activity и извлеките параметры (id, path и т.д.).
- Соберите и загрузите APK/AAB — проверка autoVerify выполняется при установке (и в Play Store).
- Тестируйте на реальных устройствах и в эмуляторе; используйте adb для воспроизведения.
Пример intent‑фильтра в манифесте
<activity android:name=".MainActivity">
<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" />
<!-- HTTPS-app link: точный путь лучше через pathPrefix -->
<data android:scheme="https" android:host="example.com" android:pathPrefix="/product" />
</intent-filter>
</activity>
Используйте https вместо custom схем, чтобы переходы работали из Chrome и других браузеров — custom‑схемы всё чаще блокируются.
Обработка ссылки в коде (Kotlin)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val data: Uri? = intent?.data
data?.let {
if (it.path?.startsWith("/product") == true) {
val productId = it.lastPathSegment
openProduct(productId)
}
}
}
Digital Asset Links — что и куда заливать
Создайте JSON и разместите по адресу: https://example.com/.well-known/assetlinks.json
Пример:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.yourpackage",
"sha256_cert_fingerprints": [
"14:6D:E9:..."
]
}
}]
SHA256‑отпечаток получите командой:
keytool -list -v -keystore your-keystore.jks | grep SHA256
Тестирование
- adb (эмулятор/устройство):
adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/product/123" com.yourpackage - В браузере: разместите ссылку Открыть в приложении и откройте её на устройстве.
- Очистите кеш браузера при отладке: adb shell pm clear com.android.chrome
Сравнение подходов
| Параметр | Custom URI (myapp://) | Android App Links (https) |
|---|---|---|
| Работает из Chrome | Часто блокируется | Да (через autoVerify и assetlinks.json) |
| Удобство установки | Просто для dev | Требует assetlinks и сертификата |
| Поведение при отсутствии приложения | Показывает ошибку/ничего | Откроется веб‑страница |
40% проблем с deep linking — из‑за опечаток в схемах или конфликтов intent‑фильтров. Указывайте точные pathPrefix/pathPattern и проверяйте совпадение с assetlinks.json.
Частые ошибки
- Неправильный путь в intent‑фильтре (используйте pathPrefix="/product").
- Несовпадение packageName или SHA256 в assetlinks.json.
- Отсутствие android:autoVerify или забытый .well-known путь на сервере.
- Конфликт нескольких intent‑фильтров: уточните pathPattern или добавьте priority.
FAQ
- Нужно ли всегда использовать autoVerify?
Рекомендуется: autoVerify повышает вероятность, что ссылки будут открываться в приложении без спроса. - Можно ли оставить только custom‑схему (myapp://)?
Можно для внутренних тестов, но в продакшене используйте https для совместимости с браузерами. - Как проверить, что assetlinks.json видим для Google?
Доступность проверьте по URL и убедитесь, что JSON корректен; при установке с Play Store система проверит соответствие.
Следуя этим шагам, вы получите надёжные переходы из браузера в приложение и уменьшите отказы при переходе на целевой контент.