Какие виды ссылок на приложение существуют?
Что проверяют
Знаете ли вы, как ссылка открывает мобильное приложение и сколько у этого процесса развилок, которые нужно покрыть тестами. Следом почти всегда просят составить чек-лист проверки диплинка.
Как отвечать
Назовите виды по механизму, а не по назначению:
- ссылки со своей схемой (custom scheme):
myapp://product/42. Работают, только если приложение установлено. Схему может перехватить чужое приложение; - Android App Links: обычные
https-ссылки, которые система отдаёт приложению после проверки домена. Нужныandroid:autoVerify="true"в intent-filter и файл/.well-known/assetlinks.jsonна сайте. С Android 12 непроверенная веб-ссылка открывается в браузере, а не в диалоге выбора; - iOS Universal Links: то же для iOS, файл
apple-app-site-associationна домене и entitlementapplinks:в приложении. Если приложения нет, открывается сайт; - отложенные диплинки (deferred): пользователь без приложения идёт в стор, ставит его и при первом запуске попадает на нужный экран. Делаются через SDK атрибуции. Firebase Dynamic Links закрыли в августе 2025 года, так что их остатки в проекте уже дефект;
- ссылки на стор: страница приложения в Google Play, App Store или RuStore.
Дальше покажите, как тестировать. На Android ссылку открывают через adb shell am start -a android.intent.action.VIEW -d <url>, статус проверки домена смотрят в adb shell pm get-app-links <пакет>. На симуляторе iOS есть xcrun simctl openurl booted <url>. Матрица: приложение установлено или нет, запущено, в фоне или выгружено, пользователь залогинен или нет (после входа он должен вернуться на целевой экран), неверные параметры или удалённый контент, открытие из мессенджеров, почты и по QR-коду.
Где спотыкаются
Проверяют диплинк только из заметок на тестовом телефоне. Встроенные браузеры мессенджеров и почтовые редиректы ломают переход чаще всего.
Не проверяют холодный старт. Из фона ссылка работает, а при выгруженном приложении открывается главный экран.
Вводят ссылку в адресную строку Safari и заводят баг. Universal Link из адресной строки приложение не открывает, так задумано.