Android M--App Links

谷歌在Android6.0(M)中,推出了一项新功能,就是app links。以前通过一个uri打开app,会弹出一个选择框,里面是所有符合条件的应用列表。但是使用app links的话,就可以直接跳转到对应的应用,用户无须选择,这增加了体验及安全性。

谈到app links,就不得不说deep links。这是从android2.0之后就有的功能(具体最初版本不详)。即app在自己的manifest文件中,配置intent filter,添加scheme,外部app就可以通过这个uri调起相应的app。具体设置请看官方文档 , 里面的例子很详细了。

值得注意的是Category的设置

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

这个两个都是必须设置的,DEFAULT表示是否被隐式intent识别,也就是不传app的package name。BROWSABLE表示是否可以被浏览器调起。

那么app links怎么设置呢。
首先为intent-filter标签添加android:autoVerify="true"的属性

<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="www.example.com" />
        <data android:scheme="https" android:host="www.example.com" />
    </intent-filter>

</activity>

创建JSON文件,JSON文件中需要包含app的ID以及APK的公钥证书。这个地方一个App可以对应多个website,一个website也可以对应多个App。具体详情可以前往 Android Developer

json文件示例:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.myapp",
    "sha256_cert_fingerprints": ["6C:EC:C5:0E:34:AE....EB:0C:9B"]
  }
}]

创建完文件之后,需要上传它同时保证它可以使用这个URL访问http://example.com/.well-known/statements.json

这样app links就创建好了,通过www.example.com的域名,就可以直接打开app,是不是很神奇?
但是这种方式门槛略高,需要应用有自己的域名,有自己的服务器。对于小型开发者是难以实现的。

推荐阅读更多精彩内容