一、引言
在做安卓项目时,如果遇到需要把项目中的商品连接分享到微信或者微博,然后通过点击连接地址到对应app的相关页面中,这时就需要使用Android的deepLink技术。
二、集成步骤
原理:主要利用的是Intent的隐式机制
1.在对应项目的启动页面的AndroidManifest文件中添加如下的隐式过滤
<activity android:name=".WelcomeActivity">
......
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:scheme="com.zjbl.stock"
/>
</intent-filter>
</activity>
对这一部分的解释
对于熟悉隐式Intent的部分,这部分代码应该不难理解。这里我们新增了一个标签,在里面加入了action,
category和data三部分内容。其中action和category部分要固定写成这个样子,我们不能修改的,
因为当你点击一个html链接时系统自动发出就是这样的action和category。
然后data部分就需要我们来自定义了,android:scheme用于指定协议,类似于http这样的东西,
这里我们指定成了com.example.androidtest,这是一个自定义的协议,指定成这样是为了避免
和其它的应用程序冲突,从而误把deep links链到人家的程序里去了。 除了android:scheme之外,
我们还可以通过android:host来指定域名,android:port来指定端口,android:path来指定路径,
这些属性都可以对deep links进行更多的限制,
要满足特定条件才能打开指定App。那这里我希望只要是使用com.example.androidtest协议的链接
就能打开我们的程序,因此就不对其他属性进行设置了。
2.在本地开启tomcat服务器,建立一个测试网页,在手机里打开该网页,在该网页上放一个连接
<a href="com.zjbl.stock://goodsId">Try Deep Links</a>
这里要注意网页中的连接与上面AndroidManifest文件中添加的data中的scheme要一致,否则掉不起该app
3.在WelcomeActivity中添加以下代码
如果不添加goodsId字段,则可以打开对应的app,而不进入具体的界面去。@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = getIntent(); if (intent != null) { Uri uri = intent.getData(); String host = uri.getHost(); if ("goodsId".equals(host)) { // 跳转到商品详情页面 } } }
三、总结
总体而言,集成交简单,注意隐式intent的使用。
思考:1.不能通过分享的地址直接跳到对应的app中去,必须要先跳到一个共用页面中,在页面中点击链接到app中;
2.没办法判断手机中没有安装app时,跳转到下载app界面