创建 DeepLinkMatcher 实例

如需将传入的 DeepLinkRequest 实例映射到可添加到 应用返回堆栈的键,请定义 DeepLinkMatcher 实例。

DeepLinkMatcher 是一个抽象类,包含两个方法:matchmatchRequest。子类必须实现 matchRequest,该方法接受 DeepLinkRequest,并在 请求匹配时返回 DeepLinkMatcher.MatchResult,否则返回 null

由于多个匹配器可能会匹配单个请求,因此 MatchResult 会实现 Comparable 以对结果进行排名并选择最佳匹配项。

类型形参

DeepLinkMatcher 类声明了两个泛型类型形参: DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>

  • T : Any:深层链接匹配时返回的目标导航键类型(例如 UserProfileKeyNavKey)。
  • R : DeepLinkMatcher.MatchResult<T>matchRequestmatch 返回的特定 MatchResult 子类型 。

第二个类型形参 R 会保留专门的匹配信息,而无需进行未经检查的向下转换:

预先过滤请求

DeepLinkMatcher 实现可以指定 DeepLinkMatcher.Filter 实例列表,以便在 评估请求之前对其进行过滤。

该库包含用于创建常见过滤器的辅助函数:

借助这种方法,您可以将同一 URI 模式重复用于不同的操作,例如查看与修改:

由于 Filter 是一个函数式 (SAM) 接口,因此您还可以使用 lambda 表达式创建过滤器:

使用提供的匹配器

该库包含三个标准 DeepLinkMatcher 实现: StaticKeyDeepLinkMatcherUriDeepLinkMatcherBackStackMatcher。如果这些匹配器不符合应用的要求, 您可以创建自定义深层链接匹配器

对于没有要提取的实参的基本深层链接,请使用 StaticKeyDeepLinkMatcher来匹配符合所有 提供的过滤器的请求。

例如,如需处理 ACTION_APPLICATION_PREFERENCES 的 intent,请执行以下操作:

如需根据模式匹配分层 URI 并提取实参,请使用 UriDeepLinkMatcher。例如,您可以匹配 www.example.com/users/{id} 以 将 id 实参提取到目标键中。如需了解详情,请参阅 匹配 URI 深层链接

构建合成返回堆栈

如需定义如何从成功匹配项构建合成返回堆栈,请使用 BackStackMatcher。请勿直接实例化 BackStackMatcher ,而是在另一个 上调用 withBackStack 扩展函数DeepLinkMatcherwithBackStack 会将接收器封装在 BackStackMatcher 中,该 BackStackMatchResult 会返回包含合成返回堆栈 List。由于 BackStackMatchResult 会将比较委托给底层匹配结果,因此在 withBackStack 中封装匹配器会保留其原始匹配排名。

如需在 activity 中处理生成的返回堆栈,请参阅 匹配传入的请求