Deep links и App Links
Вопрос
Как реализовать открытие экрана товара по ссылке с сайта и что при этом может пойти не так?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
intent-filter в манифесте и navDeepLink у назначения
App Links: autoVerify и assetlinks.json с отпечатком сертификата
Синтетический back stack для корректного «Назад»
Проверка авторизации: если не вошёл, сначала вход, потом переход
Валидация параметров ссылки, это внешний ввод
Тестирование через adb shell am start с URI
Что могут спросить следом
- Почему ссылка открывается в браузере, а не в приложении?
- Как обработать ссылку, если приложение уже открыто?
Разбор
В манифесте Activity объявляю intent-filter с действием VIEW, категориями DEFAULT и BROWSABLE, схемой https и хостом, а у назначения в графе navDeepLink с базовым путём. Чтобы ссылка открывалась сразу в приложении, а не через диалог выбора, делаю App Links: autoVerify и файл assetlinks.json на домене с отпечатком сертификата подписи. Частая причина «открывается в браузере» как раз неверный отпечаток, например от отладочного ключа, или файл недоступен по HTTPS. Navigation при открытии по ссылке строит синтетический back stack, поэтому «Назад» ведёт на родительский экран. Если экран требует входа, сначала показываю вход и потом продолжаю переход. Параметры из ссылки это внешний ввод, их нужно проверять. Если Activity уже открыта, ссылка придёт в onNewIntent, и её нужно передать в navController.handleDeepLink. Проверяю через adb shell am start -a android.intent.action.VIEW -d с адресом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.