Android应用安全开发之浅谈网页打开APP
一、网页打开APP简介
Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布其AppLink SDK,开发者需要申请相应的资格,配置相关内容才能使用。这些都是通过用户自定义的URI scheme实现的,不过背后还是Android的Intent机制。Google的官方文档《Android Intents with Chrome》一文,介绍了在Android Chrome浏览器中网页打开APP的两种方法,一种是用户自定义的URI scheme(Custom URI scheme),另一种是“intent:”语法(Intent-based URI)。
?
第一种用户自定义的URI scheme形式如下:
?
第二种的Intent-based URI的语法形式如下:
因为第二种形式大体是第一种形式的特例,所以很多文章又将第二种形式叫Intent Scheme URL,但是在Google的官方文档并没有这样的说法。
?
注意:使用Custom URI scheme给APP传递数据,只能使用相关参数来传递数据,不能想当然的使用scheme://host#intent;参数;end的形式来构造传给APP的intent数据。详见3.1节的说明。
此外,还必须在APP的Androidmanifest文件中配置相关的选项才能产生网页打开APP的效果,具体在下面讲。
?
二、Custom Scheme URI打开APP
2.1 基本用法
需求:使用网页打开一个APP,并通过URL的参数给APP传递一些数据。?
如自定义的Scheme为:
注意:?uri要用UTF-8编码和URI编码。
?
网页端的写法如下:
?
APP端接收来自网页信息的Activity,要在Androidmanifest.xml文件中Activity的intent-filter中声明相应action、category和data的scheme等。?
如在MainActivity中接收从网页来的信息,其在AndroidManifest.xml中的内容如下:
?
在MainActivity中接收intent并且获取相应参数的代码:
另外还有以下几个API来获取相关信息:?
getIntent().getScheme(); //获得Scheme名称?
getIntent().getDataString(); //获得Uri全部路径?
getIntent().getHost(); //获得host