处理Android M应用程序链接中的特定路线

时间:2016-03-07 09:33:25

标签: android android-6.0-marshmallow applinks digital-assets-links

Android M已添加对App links的支持,方法是在网络服务器上创建一个特殊的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"]
  }
}]

目前,该关系定义为common.handle_all_urls,这意味着任何网址都会被路由到该应用。

我希望该应用能够打开特定路线,例如https://costingtons.com/products/a-product会在应用中打开,但https://costingtons.com会打开网络版。

Apple Universal Links类似的配置文件可以定义要在应用中打开的路径,语法支持模式匹配,如/products/*等。

有没有办法在Android中使用App Links做类似的事情?

3 个答案:

答案 0 :(得分:4)

assetlinks.json文件指定该特定应用程序允许打开所有网址,但应用程序本身(通过其AndroidManifest中的intent过滤器)可能更具限制性,因此它只会打开产品链接,而不是一般网站链接。

此外,即使针对特定URL调用了intent过滤器,接收者仍然可以决定不处理它,将其留给下一个处理程序(通常是浏览器)。 (也许你希望应用程序在蜂窝网络上处理链接,但让用户在wifi上处理它们。)

答案 1 :(得分:1)

据我所知,没有办法设置assetlinks文件来确定哪些路径可以/应该打开应用程序(使用iOS AASA文件的方式)。

但是,由于Android使用了Intent Filters,您可以使用它们来限制应该打开应用程序的路径。根据之前的评论,assetlinks文件仅说明可以打开应用程序的URL。应用程序可以定义应该打开应用程序的URL。

因此,使用上面的示例,您需要为您的某个活动定义一个Intent Filter,它看起来像:

<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>

我发现这方面的最大限制是,排除某些路径(即没有前缀为xyz的网址)无法解决,所以你&#39 ; d必须提供一组详尽的Intent过滤器,以匹配您希望允许进入应用程序的所有URL。

答案 2 :(得分:0)

@zmarties是正确的,您唯一需要做的就是确保您的Manifest.xml配置为支持https://yourdomain.com/product/*而不是https://yourdomain.com/otherthingshttps://yourdomain.com/otherthings然后会打开一个网站浏览器。

如何证明?

ASOS和我所知道的大多数电子商务应用程序都启用了应用程序索引编制。

已安装ASOS Android应用:

adb shell am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "https://www.asos.com/men/shoes-boots-trainers/cat?cid=4209"

将在其Android应用中显示类别屏幕,

而以下内容将打开Web浏览器:

adb shell am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "https://www.asos.com/dummycrazyurl"