Android AppLink功能实现,原理和干货,包教会

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中间加上下面的代码。

			
			
				
				
				
				
				
			
        

写法基本上通用的,有三地方需要注意。

第一是

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

Android AppLink功能实现,原理和干货,包教会_第1张图片

选第三项Associate website

Android AppLink功能实现,原理和干货,包教会_第2张图片

这里要注意site domain必须是https的,没有的要注册一下https,经测试http不好使。

下面生成的Preview就是安全验证文件内容,点击Save file可以保存到本地,然后将这个文件丢到服务器上。

图片最下方

是提示你app安装时请求文件的url,你可以先测试下是否可以正常请求到文件。

你也可以点击Android AppLink功能实现,原理和干货,包教会_第3张图片

让Android studio帮你验证,不过我是从来没成功过。

 

以上都完成后,就可以连模拟器测试了,我是在锤子便签中测试的,编辑一个url例如

http://launchapp.mydomain.com

https://launchapp.mydomain.com

https://launchapp.mydomain.com?para1=data1

都可以成功拉起app而没有任何弹框,后面可以加参数,并且我们在Associate website中,选第二项

Android AppLink功能实现,原理和干货,包教会_第4张图片

Android studio可以自动将获取参数的代码加入到onCreate()内,这块用的不多就不说了。

Android AppLink功能实现,原理和干货,包教会_第5张图片

最后,有一点要补充的是App Links目前只支持android 6.0和6.0以上,不过我用网易mumu模拟器,却无法拉起,只能通过deep link的方式,用android 7.0的华为nova2正常。所以建议大家尽量用真机进行测试。

如果必须要兼容6.0以下,那么建议再新增一个比较奇怪的scheme,配置好AppLinks也就自动配置好了deepLink,通过自定义一个比较奇怪的scheme,并通过浏览器跳转的方式,deepLink也可以实现类似没有弹框的效果,瑕疵就是每次必须会打开浏览器,有需要的小伙伴可以自己研究下,或者留言我告诉你怎么解决。

你可能感兴趣的:(Android AppLink功能实现,原理和干货,包教会)