Создайте экземпляры 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 сохраняет его исходный рейтинг совпадения.

Для обработки образовавшегося стека ошибок в вашем действии см. раздел «Сопоставление входящего запроса» .