Deep linking 深度链接
来源:互联网 发布:php数组做分页 编辑:程序博客网 时间:2024/05/21 13:48
使用安卓或ios软件的过程中经常碰到这样一种情况:当我在浏览器打开一个页面时,时常会自动打开相对应的app,并进入相应的app页面中,这就用到一项技术-Deep Linking,下面就来介绍一下如何在自己的android APP中使用这项技术。
1。假设已经有了一个app项目,我们需要在项目中新建一个Activity。我们暂且取名为ViewActivity,在AndroidManifest.xml文件中的ViewActivity标签中添加Intent-filter:
<activity android:name=".activity.ViewActivity"> <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="myapp"/> </intent-filter> </activity>
2。此时在网页中就可调用这个地址就可以打开我们的app,下面是我写的一个测试deep linking的html代码:
<!DOCTYPE html><html> <head> <meta charset="{CHARSET}"> <title></title> </head> <body> <a href="myapp://">打开我的app</a> </body></html>
在手机上打开这个网页,点击链接“打开我的app”就可以自动打开我们的app了,并且能自动进入ViewActivity这个页面中。其实并不是只有myapp://这个链接可以进入我们的app,只要开头为myapp://的链接都可以自动进入我们的app。
3.但是我们的要求不是自动进入app的ViewActivity页面,我们的ViewActivity只是作为一个处理deep linking 的一个过渡页面。总不能在每个页面都要写这么一套代码吧,当然不能,下面我就来介绍如何根据schema内容来引导app进入页面
1).在ViewActivity中取出我们的URI值。在此顺带讲解一下URI值中的各个属性,可能有些代码在我们这个测试项目中用不到,只是作为demo讲解一下(我的项目使用kotlin写的,暂时就用kotlin给大家讲解了,我相信懂java的应该都能看懂kotlin)
val uri = intent.data//链接地址 val host = uri.host//域名 var query=uri.query//获取参数列表 var params = query.toString().split("&") var bundle=Bundle()//bundle容器,用来保存传递链接问号后带的参数 if(null!=params){ for (key_value in params) { bundle.putString(key_value.split("=")[0],key_value.split("=")[1]) } } intent.putExtras(bundle) var pageName=uri.getHost()//这就是我们链接中传递过来的页面名字,因为很多情况下需要统一android与IOS的页面跳转,所以这个名字并不是我们严格意义上的项目中的页面名,而是我们私下里商量好的那个字符串对应哪个页面 when(pageName){ "page1" ->{ intent.setClass(this,Page1::class.java) startActivity(intent) } "page2" ->{ intent.setClass(this.Page2::class.java) startActivity(intent) }} finish()
大功告成,至此我们的deep link基础就讲解完了,app此时就可以根据事先的约定根据链接打开并跳转到相应的app了,并且携带了链接后带的参数传到相应的Activity中,下面要做的就是你与html约定好链接的参数问题了
- Deep linking 深度链接
- Deep Linking(深度链接)
- Deep Linking 深度链接 2
- SWFAddress--深度链接(Deep linking)
- 深度链接(Deep linking)--2
- Flex里的深度链接(Deep Linking)
- iOS 中的 Deferred Deep Linking(延迟深度链接)
- iOS 中的 Deferred Deep Linking(延迟深度链接)
- iOS 中的 Deferred Deep Linking(延迟深度链接)
- 深度链接(Deep-linking)是移动和网络之间缺失的链接
- Deep Linking / SEO with Flex
- 链接基本原理(Linking)
- 链接(Linking)
- 深度链接 Deep Link 开发遇到的坑
- 深度链接 Deep Link 开发遇到的坑
- Deep Linking打破APP信息孤岛
- 关于VC++的增量链接(Incremental Linking)
- 精图规范1.0----17 链接 Linking
- php 微擎 分页
- 设置DatePickerDialog主题颜色及起始日期
- log4j
- 理解深度学习中的卷积
- (二)Spring-boot 配置文件加载顺序
- Deep linking 深度链接
- 使用linux 命令行下载oracle官网jdk失败处理方法
- python里使用difflib库的Differ来比较文本
- C语言中Sizeof与Strlen的区别
- 74. Search a 2D Matrix
- 简单的SpringBoot工程搭建
- python中defaultdict方法的使用
- HTML标签marquee实现滚动效果
- UDP 实例