Android URI schemes与App Links的区别

22

你看过这个吗?https://dev59.com/01gQ5IYBdhLWcg3w6IOg - RobVoisey
这个链接是关于应用索引的,但我询问的是应用链接。 - Igor Kostenko
1个回答

29

URI Scheme Deep Linking (Android 4.2)

标准的URI scheme深层链接(安卓4.2)允许开发者为URI scheme,例如pinterest://注册应用程序。当用户点击此链接并已安装该应用程序时,应用程序将会打开。如果应用程序未安装,则会产生“页面未找到”错误。

它通过在清单中使用意向过滤器来注册应用程序以响应给定的URI实现。

<intent-filter>
    <data android:scheme="your_uri_scheme" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
你可以通过获取给定活动中的intent字符串来处理链接。
Uri data = this.getIntent().getData();
if (data != null && data.isHierarchical()) {
    String uri = this.getIntent().getDataString();
    Log.i("MyApp", "Deep link clicked " + uri);
}

注意:如果用户来自Chrome浏览器,你需要单独处理。如果应用程序未安装,Chrome不会抛出错误,它会带你去Play商店或(可选)提供回退URL

应用链接(Android 6.0)

应用链接是为了复制iOS通用链接的功能而引入的。应用链接是将网站链接转换为应用链接的简单方法。因此,如果点击一个普通的HTTP/HTTPS链接并且对应的应用已安装,它将立即打开。如果应用程序未安装,则提供一个回退的Web链接。

要求

  • 你必须拥有一个功能性的网站
  • 用户必须使用Android 6.0操作系统

配置

在应用链接的情况下,你的清单文件将略有不同。

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="http" android:host="yoursite.com" />
    <data android:scheme="https" android:host="yoursite.com" />
</intent-filter>

接下来,您必须注册您的网站以处理应用链接。 您需要创建一个assetlinks.json文件并将其托管在您的网站上,例如yoursite.com/.well-known/assetlinks.json

/.well-known/assetlinks.json

[{
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
         "namespace": "android_app",
         "package_name": "io.branch.branchster",
         "sha256_cert_fingerprints": 
        ["14:6D:E9:..."]
    }
}]

延迟深度链接

遗憾的是,这些方法都不支持延迟深度链接,即在应用程序尚未安装时深度链接到应用程序内部内容的能力。对于引导新用户的重要用户体验,我建议使用第三方平台,如Branch(完全透明化披露,我在Branch工作),或Firebase。它们将处理所有功能和边缘情况,并包括其他功能,如深度视图和应用程序横幅。


谢谢!为什么需要 data != null && data.isHierarchical()?在 Deep Links 中是否存在 isHierarchical() == false 的情况? - CoolMind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接