DeepLinkDispatch

轻松声明和路由您的深度链接
4,003
作者Christian Deonier

深度链接提供了一种链接到网站或应用程序上特定内容的方法。这些链接可被索引和搜索,并且可以为用户提供比普通主页或屏幕更相关的直接访问信息。在移动环境中,这些链接是 URI,链接到应用程序中的特定位置。

在 Airbnb,我们经常使用这些深度链接来链接到房源、预订或搜索查询。例如,一个典型的房源深度链接可能如下所示:

airbnb://rooms/8357

此深度链接直接绕过应用程序的主屏幕,并打开蘑菇穹顶小屋的房源信息。其他深度链接会指向其他非内容屏幕,例如注册屏幕或有关应用程序如何工作的说明屏幕。

Android 通过在清单中声明来支持深度链接。您可以添加意图过滤器,定义深度链接模式和活动之间的映射。随后,任何具有注册的模式、主机和路径的 URI 都会在应用程序中打开该活动。

虽然这种传统方法对于简单的深度链接使用很方便,但对于更复杂的应用程序来说,它会变得很繁琐。例如,您可以使用意图过滤器来指定路径模式,但这有一些限制。您无法轻松地指示您希望在过滤的 URI 中包含的参数。对于复杂的深度链接,您可能需要编写一个解析机制来提取参数,或者更糟糕的是,在许多活动中分布类似的代码。

DeepLinkDispatch旨在帮助开发者轻松处理深度链接,无需编写大量样板代码,并允许您提供更复杂的解析逻辑来决定如何处理深度链接。您可以像其他库一样,简单地用 URI 来注解 Activity。查看上面示例深度链接 URI,您可以像这样注解一个活动,并声明应用程序需要解析的“id”参数:

@DeepLink(“rooms/{id}”)
public class SomeActivity extends Activity {
   ...
}

在用活动应该处理的深度链接 URI 注解特定活动后,DeepLinkDispatch 将自动路由深度链接并解析 URI 中的参数。然后,您可以确定意图是由深度链接触发的,并提取在注解中声明的参数。这是一个示例:

if (getIntent().getBooleanExtra(DeepLink.IS_DEEP_LINK, false)) {
      Bundle parameters = getIntent().getExtras();
      String someParameter = parameters.getString("id");
      ...
}

DeepLinkDispatch 的核心是一个简单的 Java 类,充当已注册活动及其 URI 和应提取的参数的注册表。DeepLinkDispatch 还生成一个垫片 Activity,尝试将任何深度链接与注册表中的条目匹配——如果找到匹配项,它将提取参数并使用包含参数的 Intent 启动相应的 Activity。

此外,DeepLinkDispatch 旨在提供对深度链接使用情况的更多洞察。Android 默认情况下不会提供太多关于哪些深度链接正在使用以及哪些深度链接失败的洞察。DeepLinkDispatch 在应用程序类中为任何深度链接调用(成功或失败)提供回调,允许开发者跟踪和纠正应用程序中触发的任何有问题的链接。

此类回调的一个示例:

public class SomeApplication extends Application implements DeepLinkCallback {
  @Override public void onSuccess(String uri) {
    // Handle or track a successful deep link here
  }

  @Override public void onError(DeepLinkError error) {
    // Handle or track and error here
  }
}

总而言之,如果您希望轻松管理深度链接,请使用 DeepLinkDispatch。使用注解声明深度链接和参数非常简单,它将处理更复杂的解析和路由到您的活动,而无需您编写大量额外代码。DeepLinkDispatch 还通过为您提供的深度链接事件的简单回调,让您对深度链接的使用情况有更深入的了解。