Mic*_*ael 5 android applinks android-6.0-marshmallow digital-assets-links
Android M 通过在Web服务器上创建特殊的assetlinks.json来将链接处理委派给移动应用,从而增加了对应用链接的支持。
例如,这是该文件的内容:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.costingtons.app",
"sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:"
"A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
Run Code Online (Sandbox Code Playgroud)
当前,该关系被定义为common.handle_all_urls意味着任何URL将被路由到该应用。
我希望该应用程序打开特定的路线,例如https://costingtons.com/products/a-product将在应用程序中打开,而https://costingtons.com将打开网络版本。
Apple Universal Links类似的配置文件可以定义要在应用中打开的路径,并且语法支持模式匹配等/products/*。
有什么办法可以通过Android中的App Link做类似的事情吗?
assetlinks.json文件指定允许该特定应用打开所有URL,但是该应用本身(通过其AndroidManifest中的意图过滤器)可能更具限制性,因此仅打开产品链接,而不打开常规网站链接。
此外,即使针对特定URL调用了意图过滤器,接收方仍然可以决定不对其进行处理,而将其留给下一个处理程序(通常是浏览器)。(也许您希望该应用程序在蜂窝网络上处理链接,但让浏览器在无线网络上处理链接)。
据我所知,没有办法设置资产链接文件来确定哪些路径可以/应该打开应用程序(您可以使用 iOS AASA 文件的方式)。
但是,由于 Android 使用了意图过滤器,您可以使用它们来限制应打开应用程序的路径。根据之前的评论,assetlinks 文件只说明哪些 URL可以打开应用程序。由应用程序来定义应打开应用程序的URL 。
因此,在上面的示例中,您需要为您的一项活动定义一个意图过滤器,该过滤器如下所示:
<intent-filter android:autoVerify="true">
<category android:name="android.intent.category.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Only accept URLs that look like https://costingtons.com/products/* -->
<data
android:scheme="https"
android:host="costingtons.com"
android:pathPrefix="/products/" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我发现的最大限制是无法排除某些路径(即不是带有 xyz 前缀的 URL),因此您必须想出一组详尽的 Intent Filters 匹配您的所有 URL确实要允许进入应用程序。
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |