Где происходит настройка диплинков в Android и iOS?
Что проверяют
Знаете ли вы, где лежит конфигурация на каждой платформе, и отличаете ли собственную схему от проверенных ссылок. Для QA следом почти всегда спрашивают, как вы тестируете диплинк и что происходит, если приложение не установлено.
Как отвечать
Сначала разведите два типа: собственная схема (myapp://item/42) и обычная https-ссылка, которую система отдаёт приложению после проверки домена.
- Android, схема:
<intent-filter>у активити вAndroidManifest.xmlсaction.VIEW, категориямиDEFAULTиBROWSABLEи тегом<data>; - Android App Links: тот же фильтр с
android:autoVerify="true"плюс файл/.well-known/assetlinks.jsonна домене с именем пакета и SHA-256 отпечатком ключа подписи. С Android 12 непроверенная https-ссылка открывается в браузере; - iOS, схема:
CFBundleURLTypesвInfo.plist; - iOS Universal Links: entitlement Associated Domains с записью
applinks:example.comи файлapple-app-site-associationбез расширения, по https и без редиректов. iOS забирает его через CDN Apple, поэтому правка файла доезжает не сразу.
Как тестировать:
- Android:
adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/item/42", статус проверки домена показываетadb shell pm get-app-links <пакет>; - iOS: на симуляторе
xcrun simctl openurl booted "https://example.com/item/42", на устройстве ссылка из «Заметок» или «Сообщений».
Сценарии для чек-листа: приложение закрыто, в фоне, не установлено, пользователь не залогинен, ссылка ведёт на удалённый объект, параметры битые.
Где спотыкаются
Проверяют Universal Link, вставив адрес в строку Safari. Так приложение не откроется, это поведение iOS, а не баг.
Путают схему и проверенные ссылки. Схему может перехватить любое приложение с тем же именем, поэтому для входа по ссылке из письма и платёжных сценариев нужны App Links и Universal Links.
Не проверяют релизную сборку. Отпечаток в assetlinks.json должен совпадать с ключом, которым подписан APK или AAB, а при подписи через Google Play это ключ из консоли, а не локальный debug.