Создание экземпляров DeepLinkMatcher

Чтобы сопоставить входящие экземпляры DeepLinkRequest с ключами, которые можно добавить в обратный стек приложения, определите экземпляры DeepLinkMatcher.

DeepLinkMatcher – это абстрактный класс, который включает два метода: match и matchRequest. Подклассы должны реализовывать метод matchRequest, который принимает DeepLinkRequest и возвращает DeepLinkMatcher.MatchResult, если запрос совпадает, или null в противном случае.

Поскольку одному запросу может соответствовать несколько сопоставителей, MatchResult реализует Comparable, чтобы ранжировать результаты и выбирать наилучшее соответствие.

Типы параметров

Класс DeepLinkMatcher объявляет два параметра универсального типа: DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>.

  • T : Any – тип ключа навигации по целевой странице (например, UserProfileKey или NavKey), который возвращается, когда ссылка на контент совпадает.
  • R : DeepLinkMatcher.MatchResult<T> – конкретный подтип MatchResult, возвращаемый matchRequest и match.

Второй параметр типа, R, сохраняет информацию о специализированном совпадении, не требуя непроверенного нисходящего приведения типов:

Запросы с предварительной фильтрацией

Реализации DeepLinkMatcher могут указывать список экземпляров DeepLinkMatcher.Filter, чтобы фильтровать запросы перед их оценкой.

В библиотеке есть вспомогательные функции для создания распространенных фильтров:

Этот подход позволяет повторно использовать один и тот же шаблон URI для разных действий, например для просмотра и редактирования:

Поскольку Filter – это функциональный интерфейс (SAM), вы также можете создавать фильтры с помощью лямбда-выражений:

Используйте предоставленные сопоставители

Библиотека включает три стандартные реализации DeepLinkMatcher: StaticKeyDeepLinkMatcher, UriDeepLinkMatcher и BackStackMatcher. Если эти сопоставители не соответствуют требованиям вашего приложения, вы можете создать собственные сопоставители ссылок на контент.

Для простых ссылок на контент, из которых не нужно извлекать аргументы, используйте StaticKeyDeepLinkMatcher, чтобы сопоставлять запросы, соответствующие всем заданным фильтрам.

Например, чтобы обрабатывать намерения для ACTION_APPLICATION_PREFERENCES:

Для сопоставления иерархических URI с шаблонами и извлечения аргументов используйте UriDeepLinkMatcher. Например, вы можете сопоставить www.example.com/users/{id}, чтобы извлечь аргумент id в целевой ключ. Подробнее о сопоставлении ссылок на контент с URI…

Как создать синтетический обратный стек

Чтобы определить, как создать синтетический обратный стек из успешного совпадения, используйте BackStackMatcher. Вместо того чтобы создавать экземпляр BackStackMatcher напрямую, вызовите функцию расширения withBackStack для другого объекта DeepLinkMatcher. withBackStack оборачивает получателя в BackStackMatcher, который возвращает BackStackMatchResult, содержащий синтетический обратный стек List. Поскольку BackStackMatchResult делегирует сравнение базовому результату сопоставления, упаковка сопоставителя в withBackStack сохраняет его исходный рейтинг сопоставления.

Чтобы обработать полученный обратный стек в действии, ознакомьтесь с разделом Сопоставление входящего запроса.