在某些场景下,用户希望点击短信中的一个URL(类似:http://www.johnny-s.cn/2017/09/08/android-handler/)打开已安装的某个App。
在安卓6.0之前,点击URL需要跳转到一个选择对话框页面,用户选择用哪个App打个这个链接,类似这样。
2015年谷歌I/O大会,谷歌宣布Android M(6.0)支持 App Links (Deep Link)的方式直接从链接打开Native App,这将对Android的用户体验造成深远的影响,试想一下,用户点击一个web网站(http 或者 https)直接打开了Native App,Amazing。
会有人问,那6.0一下的机型怎么办,现在Android 6.0以上的机型已经占市场超过70%的份额,其他的30%只好委屈一下多一步弹框的选择了。
回到正题,具体怎么让App 有 Deep Link的功能,这个谷歌的官方接入文档,有视频有文字,一般人都可以看懂。
https://developer.android.com/studio/write/app-link-indexing (需翻墙)
那么接下就说一下怎么使用Android Studio(2.3以上)使App具有Deep Link功能。
- 点击菜单栏 Tools->App Links Assistant 进入设置页面
打开Open URL Mapping Editor 点击绿色的+号
输入一个Host 和 点击之后启动的Activity。这里我用GitHub Pages作为自己的Host,具体Github Pages是什么请自行Google。
2.点击Select Activity 选择acitivty之后AS会在此Activity中创建几行代码,作用是可以接收点击URL传来的值。(我现在用的AS 3.1.3 只能在Java类中添加代码,Kotlin类需要自己写)
3.第三部很关键,能否实现Deep link就看这步
在Site domain中输入自己的域名,谷歌要求域名必须支持HTTPS 输入自己的包名,点击Generate Digital Asset Links File 将生成一个.json文件,将此文件放到域名根目录下的.welll-known/assentlinks.json位置,需要注意的是,.开头的文件夹为隐藏文件夹需要在根目录下加配置文件 _config.yml 中添加
include: [".well-known"]
以上都就绪了,点击https开头的URL就可以在浏览器访问到assentlink.json里的内容了。
最后一定要点击Link and Verify 按钮,点击之后会在AndroidManifest.xml中的intent-filter中添加 autoVerify = true
<activity
android:name=".activity.MainActivity"
android:screenOrientation="portrait">
<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="https"
android:host="privatejohn.github.io" />
</intent-filter>
</activity>
这只成功可在这里验证 https://developers.google.com/digital-asset-links/tools/generator (需翻墙)
4.最后点击Test App Links进行验证 或者 自己在短信里造一个URL进行验证
到现在为止理论上已经没问题了,但是,当你进行验证的时候,选择弹框还是出来了,为什么呢?
打开AS的logcat 过滤关键字 verification
明明自己可以访问到域名的.well-known/assetlink.json,但是为啥Android系统不行,先有谷歌后有天,谷歌面前有堵强。机智的我打开了手机的SS,然后就成功了。
我试着安装了其他的应用,亚马逊,爱奇艺,百度等,只要是没翻墙的情况下都验证失败,坑啊。
所以告诉大家一个不信的消息,谷歌的App Links功能在中国GG。这几天我喜欢的陈一发儿凉了,也欢声笑语打出GG.
如果谁有好的解决办法可以留言告诉我。