Что такое и как работает deep linking?

Посмотреть в Telegram: @AndroidSobes/63
Deep linking – это концепция перемещения по ссылке на конкретный ресурс или страницу веб-сайта или приложения. В андроиде под deep link подразумевают URL, который открывает экран приложения, если приложение установлено на устройстве.

Реализация механизма deep linking для Android-приложения состоит из двух частей:
1. Сделать так, чтобы операционная система запускала ваше приложение, когда пользователь кликает на ссылку.
2. Реализовать навигацию внутри приложения на нужный экран.

Один из способов запуска приложения по ссылке – использование intent-filter с кастомной схемой.

В интент фильтре на скриншоте задана схема itsobes. Это значит, что когда пользователь кликнет на ссылку вида itsobes://<authority>/<path>, система запустит SplashActivity. Если на устройстве установлены несколько приложений или активити с интентом, обрабатывающим данную схему, то система покажет пользователю диалог выбора приложения.

Ссылки с кастомной схемой работают в нативных приложениях, если поддерживаются операционной системой. Например ссылка для телеграмма: tg://resolve?domain=JavaSobes будет работать в приложениях под Android, iOS и Mac OS, но не откроется в браузере. Такие ссылки работают в телеграмме, несмотря на блокировку РКН, а вот ссылка на веб-клиент https://web.telegram.org/#/im?p=@JavaSobes заблокирована в России.
Как было сказано в предыдущем посте, ссылки с кастомной схемой не работают в браузерах. Обычно этого не достаточно и требуется использовать одну и ту же ссылку, которая будет открывать приложение или Play store на Android, приложение или App store на iOS, веб-сайт на десктопе. Например как эта ссылка на Google Maps https://goo.gl/maps/8JTWxetcw7PutAfu8.
Разберем алгоритм обработки таких ссылок на примере https://itsobes.ru/app/AndroidSobes/7.html (ссылка не рабочая):
1. Когда пользователь переходит по ссылке, открывается пустая веб-страница, которая по User-Agent определяет платформу пользователя.
2. Если это браузер на Android, происходит редирект на ссылку c кастомной схемой itsobes://AndroidSobes/7.
3. Если браузер на iOS, то редиректится на Universal link.
4. Если браузер на десктопе, то редиректим на сайт https://itsobes.ru/AndroidSobes/7.html.

Самая сложная часть – это определение платформы по User-Agent, потому что под Android есть тысячи браузеров. Существуют готовые сервисы, реализующие механизм обработки deep link, например https://docs.adjust.com/en/deeplinking.

В API level 23 были добавлены App Links, упрощающие обработку deep links. Мы разберем App Links в одном из следующих постов.
После того, как система обработала deep link и запустила активити, необходимо выполнить второй шаг и открыть экран, заданный в deep link. Для этого в запущенной активити получаем интент методом getIntent() и далее получаем URI методом intent.getData(). Полученный URI – это и будет deep link, по которому запущена активити, в нашем примере это itsobes://AndroidSobes/7.
Дальше нет никакой магии, нужно руками распарсить URI и реализовать логику перехода на экран, который должен быть отображен.

Подробнее по теме.