创建 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>:matchRequest 和 match 返回的特定 MatchResult 子类型。

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

预过滤请求

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

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

通过这种方法,您可以针对不同的操作(例如查看与修改)重复使用相同的 URI 格式:

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

使用提供的匹配器

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

对于没有要提取的实参的基本深层链接,请使用 StaticKeyDeepLinkMatcher 匹配满足所有提供的过滤条件的请求。

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

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

构建合成返回堆栈

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

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