App Link简介
App Link是google 在 Android 6.0系统以上实现的一种技术(深度链接技术),具体是用户可以通过点击web链接,达到打开指定app(已安装)或网页(未安装app的情况),可以大幅提升用户体验,同时降低服务器h5页面需对手机是否已安装app进行逻辑判断的操作。
App Link工作原理:
app在安装的时候,验证一个服务器地址(例如http://m.fengjr.com),成功验证通过后,当用户点击于类似http://m.fengjr.com/about的web链接,即可打开app本地相关页面(如app未安装,打开相关网页).
AppLink实现步骤:
1.app代码相关配置
app AndroidManifest.xml中增加相关配置:
<activity android:name=".act.impl.SchemeDispatcher" android:configchanges="orientation|keyboardHidden" android:launchmode="singleTask" android:screenorientation="portrait" android:theme="@style/AppTheme.NoTitleBar">
<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="m.fengjr.com">
<data android:scheme="https" android:host="m.fengjr.com">
<!--
<data
android:host="m.fengjr.com"
android:pathPrefix="/appFengjr"
android:scheme="http"/>
-->
</data></data></category></category></action></intent-filter>
</activity>
其中关键的两处,"android:autoVerity="true"指定该组件需要在程序安装时,进行深度链接验证;"android:host="m.fengjr.com"指定要验证的服务器地址。
2.assetlinks.json文件制作
在服务器http://m.fengjr.com/根目录下新建.well-known目录,并上传一个assetlinks.json(有的文章此处指定文件名为statments.json,经验证,为错误命名,正确名称应为assetlinks.json),文件内容格式类似:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.fengjr.mobile",//替换成自己应用的包名
"sha256_cert_fingerprints": ["**:**::**::**::**::**::**::**::BB:69:56:A6:DB:FE:1C:38:16:D3:3D:01:BD:AC:8F:8C:86:26:CD:**::**::**::**::**:"]//根据app的keystore文件生成的sha256签名
}
}]
附assetlinks.json文件生成方法:
终端执行如下命令,并输入密钥库口令
keytool -list -v -keystore /path/to/app/release-key.keystore
输入密钥库口令:
拷贝SHA256算法得到的证书签名内容,替换上述assetlinks.json中相关内容.然后将准备好的assetlinks.json文件上传到服务器http://m.fengjr.com/.well-known目录下
3.查看App Link验证是否生效
- 打开浏览器访问http://m.fengjr.com/.well-known/assetlinks.json,正常应该看到该文件内容输出。
- 本地编译app,然后将apk安装到手机,然后通过如下命令查看是否app验证生效
adb shell dumpsys package d
得到如下输出:
Package: com.alibaba.android.arouter.demo
Domains: m.aliyun.com
Status: ask
Package: com.ss.android.article.news
Domains: m.toutiao.com toutiao.com www.toutiao.com open.toutiao.com d.toutiao.com
Status: ask
Package: com.fengjr.mobile
Domains: m.fengjr.com
Status: always : 200000004
其中status状态解释:
- undefined — app没有在manifest中启用链接自动验证功能。
- ask — app验证失败(会通过打开方式对话框询问用户)
- always — app通过了验证(点击这个域名总是打开这个app)
- never — app通过了验证,但是系统设置关闭了此功能。
也可通过访问google api,查看app是否通过App Links验证(需翻墙)
https://digitalassetlinks.googleapis.com/v1/statements:list?
source.web.site=https://m.fengjr.com(将该网址替换为自己的验证服务器域名)
relation=delegate_permission/common.handle_all_urls
如验证通过,会得到如下结果:
delmt.png
4.验证App Link
新建一个测试网页,文字链接配置为(http://m.fengjr.com/about/),然后点击文字,即可打开本地app,
效果图:
1514193223.gif
网友评论