iOS唤醒app
今天工作需要,要实现微信、QQ等扫描二维码,唤醒app,跳到指定页面的功能。我去,一想没有做过呀!好吧!今天有时间做了,网上查了不说资料,都是说唤醒app,多么好,留存量,转化量~~~~和我有什么关系,我是搬运工!我只关心怎么实现。OK!现在上教程,我的教程!!
唤醒app的三种方法:
1.URl Scheme
对于iOS开发者来说,app应用直接的跳转,分享等的跳转都是通过URL Scheme 实现,应用与应用直接的跳转。
二维码扫描的原理就是web端通过js生成页面,移动端扫描通过浏览器唤醒app。移动端判断是否是从web端启动,获取web端数据,跳转到指定的页面。
因为iOS开发,只看过简单的h5视频文档,会写一些简单的代码,在网上搜索了一些资料。
对于使用URL Scheme 在h5中的标签的使用一个🈶三种:
iframe标签
iframe方案的唤起原理是: 程序切换到后台时,计时器会被推迟(计时器不准的又一种情况)。如果app被唤醒那么网页必然就进入了后台,如果用户从app切回来,那么时间一般会超过2s;若app没有被唤起,那么网页不会进入后台,setTimeout基本准时触发,那么时间不会超过2s。
网络上找的代码a标签
<a href="url scheme://">换去app</a>
使用window层之间跳转
window.location.href = "URL scheme://"
通过测试对比发现:
Android使用iframe唤起,ios采用window.location.href唤起更合适一点。
代码如下:
逻辑:
因为微信是禁止iOS端的深度链接得,所以需要先判断是否是微信、QQ浏览器,如果是提示用户用Safari打开,然后通过时间判断,是否安装了app如果安装就换气没有安装就跳到下载地址。
由于通过URLScheme唤起有一个文件就是他会提示调到appStore下载,我们的解决方案是把时间设成了3秒,然后在离开页面的时候关闭页面。
但是效果还是不是很好,解决的方案是:
区分系统,OS9开启Universal Links 打通深度链接
深度链接得作用:
一种能够方便的通过传统 HTTP 链接启动应用程序, 使用相同的网址打开网站和App。通过一个通用的链接便可实现,当移动设备里面已经有了某个应用,在点击了这个链接后便可实现深度链接而直接进入应用内的某个特定页面;如果手机内并没有该应用,可打开设定的网址(例如应用的落地下载页面)。
配置步骤:
1.首先,你必须有一个域名,且这个域名的网站需要支持https,然后拥有网站的上传到.well-known目录的权限(这个权限是为了上传一个Apple指定的文件apple-app-site-association),
支持Universal Links(通用链接)
创建一个json格式的命名为apple-app-site-association文件,注意这个文件必须没有后缀名,文件名必须为apple-app-site-association!!!
appID: 这里的组成方式是 teamId.yourapp's bundle identifier.如上面的 9JA89QQLNQ,ABCD1234都是teamId,这个值从哪来的呢?
它是从的开发者账户的个人中心来的,登陆你的开发者中心
paths:
根据 paths 键设定一个你的app支持的路径列表,只有这些指定的路径的链接,才能被app所处理,举个例子:如果你的网站是www.yohunl.com,你的path写的是"/support/*",那么当用户点击www.yohunl.com/support/myDoucument,就可以进入你的app了,相反www.yohunl.com/other 就不会.
path是大小写敏感的!
*号表示任意路径.
上传该文件apple-app-site-association到你的域名所对应的网站的.well-known目录下(其实也不一定是根目录,例如ghost博客站点,就没有根目录一说,它就需要放在相应的主题目录下),这一步是为了苹果能从https://你的域名/.well-known/apple-app-site-associationxh获取到你上传的apple-app-site-association文件.
上传完后,自己先访问一下,看看是否能够获取到,用我的做例子,https://yohunl.com/.well-known/apple-app-site-association,当你点击这个链接,应该是下载apple-app-site-association文件.
验证该文件是否合法,苹果为了方便开发者,提供了一个网页来验证我们编写的这个apple-app-site-association是否合法有效,验证网址,进入网站进行验证
在其中的Domains中填入你想支持的域名(这里不是随便填的,是可以支持你需要的Universal Links的域名), 必须以applinks:为前缀 例如我的填入的是
applinks:yohunl.com
applinks:www.yohunl.com
苹果将会在合适的时候,从这里填入的域名请求文件apple-app-site-association
注意:当你打开Associated Domains后,xcode会在你的工程中添加.entitlements文件
并且如果你登陆你的开发者中心,可以看到
到此,你的app就已经可以支持Universal Links(通用链接)了!!! 那么怎么测试呢?
在iOS设备中的备忘录中添加记事本或短信中输入App能识别的链接,然后直接点击此链接,就会直接跳转到你的app了
或是长按,在出现的弹出菜单中第二项是“在'XXX'中打开”,这也代表着成功。
或是你将要测试的网址放到safari中一个网页中,然后点击链接,在出现的网页上方,下滑,可以看到有 在"XX"应用中打开 (很多教程上说,在safari中直接点击,就会跳转到app,但是经过我实际验证,是不可以的,可能是苹果又调整了一下策略吧)
工程中添加处理方法
现在用户点击某个链接,直接可以进我们的app了,但是,这不是我们的最终目的,我们的目的是要能够获取到用户进来的链接,根据链接来处理,需要展示给用户的信息.
在工程里的 AppDelegate 里实现 方法
当 userActivity 是 NSUserActivityTypeBrowsingWeb 类型, 则意味着它是由Universal Links进来的,就可以添加我们自己的处理逻辑了!
这是网上一个比较详细的教程,我按照教程做了一次,我是搬运工。
查看是否支持 Universal Links的苹果网站 网址