谷歌在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,是不是很神奇?
但是这种方式门槛略高,需要应用有自己的域名,有自己的服务器。对于小型开发者是难以实现的。