赞
踩
AppLink简单来说就是你的app注册一个scheme,当安卓系统发现有用户点击可以识别的scheme,并且这个scheme在你的app中注册过,则会拉起你app的指定activity,并且可以附带参数。
不过由于Android只能识别http开头的链接,因此你注册其他scheme基本上也没意义。举例来说,可以测试注册asdkfh://www.我的app.com。由于Android不认识asdkfh,但是可以识别后半段,最后生成的链接会自动加上http,就变成了http://www.我的app.com。因此你的app还是必须使用http和https作为scheme。
说了这么多,接下来上干货。
首先,在你的AndroidManifest.xml文件中,想要拉起的activity中间加上下面的代码。
- <!-- app-link -->
- <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:host="launchmyapp.mydomain.com"
- android:scheme="http"
- />
- <data
- android:host="launchmyapp.mydomain.com"
- android:scheme="https"
- />
- </intent-filter>
- </activity>
写法基本上通用的,有三地方需要注意。
第一是
android:autoVerify="true"
这段代码是通知Android系统,本app在安装时需要对于安全host进行验证,验证后拉起app就不需要弹框安全提示,而是直接跳转app了。这段我们最后详细说。
第二是
android:scheme="http"
可见我们注册了两个可以识别的scheme,这样如果用户点击http或者https,就会提示是否拉起我们的app还是打开浏览器。
第三是
android:host="launchmyapp.mydomain.com"
这个是对scheme的补充,没有host,我们在短信,或者锤子便签这种编辑器内,点开任何http开头的链接,都会询问拉起我们的app,这样显然是不对的,我们只希望我们自己的链接拉起app。那么这个host就是预先设定可以识别的安全host。
举例来说,当我们在短信内点击一个链接如:http://launchmyapp.mydomain.com, 这样就会询问打开app,但是如果没有host,我们即使点击http://www.baidu.com也会询问打开app。因为http这个scheme已经被我们注册了。
到这里,applink已经可用了,但是我们应该注意到了那个恼人的询问弹框,就问你用浏览器打开还是app打开的弹框。那么如何让这个弹框不出现,而直接跳到app呢?问题还得回到第一点,就是那个android:autoVerify="true"。
android:autoVerify="true" 实际上干了一件时,就是app在安装是,通过确认你的host为安全host,相当于添加到了信任列表。这样每次点击到这个host时,就不需要再次弹框确认了。那么Android是如何认为这个host是安全的呢?这块的实现和广大第三方支付安全host原理类似,就是在你的host上放置一个加密文件,当app安装时访问这个文件并且内容匹配,则认为这个host是安全的。
具体操作如下:
打开App Links Assistant
选第三项Associate website
这里要注意site domain必须是https的,没有的要注册一下https,经测试http不好使。
下面生成的Preview就是安全验证文件内容,点击Save file可以保存到本地,然后将这个文件丢到服务器上。
图片最下方
是提示你app安装时请求文件的url,你可以先测试下是否可以正常请求到文件。
你也可以点击
让Android studio帮你验证,不过我是从来没成功过。
以上都完成后,就可以连模拟器测试了,我是在锤子便签中测试的,编辑一个url例如
https://launchapp.mydomain.com
https://launchapp.mydomain.com?para1=data1
都可以成功拉起app而没有任何弹框,后面可以加参数,并且我们在Associate website中,选第二项
Android studio可以自动将获取参数的代码加入到onCreate()内,这块用的不多就不说了。
最后,有一点要补充的是App Links目前只支持android 6.0和6.0以上,不过我用网易mumu模拟器,却无法拉起,只能通过deep link的方式,用android 7.0的华为nova2正常。所以建议大家尽量用真机进行测试。
如果必须要兼容6.0以下,那么建议再新增一个比较奇怪的scheme,配置好AppLinks也就自动配置好了deepLink,通过自定义一个比较奇怪的scheme,并通过浏览器跳转的方式,deepLink也可以实现类似没有弹框的效果,瑕疵就是每次必须会打开浏览器,有需要的小伙伴可以自己研究下,或者留言我告诉你怎么解决。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。