为所有平台

时间:2017-07-19 06:57:24

标签: android ios deep-linking

我知道如何使用intent过滤器处理Android和iOS中的深层链接,但我想为所有平台使用相同的URL。

如何创建一个可以在没有任何库的情况下由Android,iOS和Web处理的URL?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Android上的App Links和iOS上的Universal Links同时维护您的常规网站网址来实现此目的。

设置通用链接

为您的网站注册特定域后,您可以将iOS应用配置为使用应用而不是浏览器通过Universal Links打开该URL。

为此,请将您的域添加到Xcode项目中的关联域。

接下来,您必须托管在您的服务器https://.com/apple-app-site-association上正确配置的 apple-app-site-association文件。看起来应该是这样的。

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "<teamId>.<bundleId>.dev",
                "paths": [ "*" ]
            },
            {
                "appID": "<teamId>.<bundleId>",
                "paths": [ "*" ]
            }
        ]
    },
    "activitycontinuation": {
        "apps": [
            "<teamId>.<bundleId>.dev",
            "<teamId>.<bundleId>"
        ]
    }
}

完成此设置后,您可以使用此tool测试您的通用链接是否有效。

现在,您的应用应该能够处理您网站处理的所有相同网址。您可以看到完整的教程here

设置应用链接

App Links本质上是Android复制Universal Links的方式,因此它们以非常类似的方式运行。要设置它们,首先要在清单中添加意图过滤器。

<activity ...>
    <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>
</activity>

接下来,您在Web服务器上托管assetlinks.json文件以及 yoursite.com/.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:83:...
  }
}]

然后,您应该能够在应用内处理深层链接。要查看完整的App Links教程,请单击here

摘要

对于Android和iOS使用这两种方法,您应该能够在Web,Android和iOS的所有三种情况下使用相同的完全链接。当然,这并不涵盖deferred deep linking,并且在某些边缘情况下会失败,具体取决于用户链接的来源。出于这些原因,我建议使用第三方服务,例如Branch(免责声明,我是长期用户后为分支机构工作)或Firebase。