前言:
文章会适当说一些如何开发iOS上的universal link,但类似的文章太多了一艘一大堆,每篇都介绍的挺清楚,因此也不是重点
本文更加会侧重从前端的角度,将整个universal link 部署应用到wap app中的一些策略和一些问题解决办法
其实整个Universal Link没啥难的,真正上线过Universal link的人这些应该都趟过一遍了,本文主要是我们team去应用Universal link的时候一些文档沉淀和记录
Schema VS Universal Link
Deeplink相关的技术,在wap中唤起app其实应用最最广泛的并不是Universal Link,而是直接Schema跳转
1 location.href?=? ‘ schema://xxxx’
并且一般各大APP都会给自己做一套路由体系,这样其实可以直接在schema头后面对接路由体系,做到一行schema定位打开任意App内功能界面(我就不详细扯路由的事了)
1
2
3
4
5
6 -?(BOOL)application:(UIApplication?*)application?openURL:(NSURL?*)url?sourceApplication:(NSString?*)sourceApplication?annotation:(id)annotation?{
???? if ?([[url?absoluteString]?hasPrefix:@ “ schema://” ])?{
????????[[WKDispatcher?sharedInstance]?operationObjectFromRouteURL:[url?absoluteString]]; //路由
???????? return ?YES;
????}
}
如果单纯为了实现deeplink -- 在WAP上打开App,并且传递来数据信息,定位App内的具体逻辑,那么Schema就够了,其实没必要上Universal Link,Schema相当于是很特殊的Url,他是schema://xxx这种样子,如果安装了APP才能支撑跳转这种Schema Url,如果没安装APP就没任何效果,而Universal Link则是把普通url,长http://xxx.xxx.xxx/xxx这样的Normal Url,如果安装了App,就能像Schema一样传递给App,延续App内逻辑,如果没装App,则还会继续在浏览器里跳转这个Normal Url
Schema的弊端
Schema无法判断是否安装App
一定会有这样的产品需求的:
如果已经安装App,则打开App
如果没有安装App,则前往下载App
浏览器实际上是没有能力判断手机里是否安装了某个App的,所以聪明的程序员们选择了讨巧的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 try ?{
???? var ?appSchema?=? ‘ schema://xxxx’ ;
???? if ?($.os.ios)?{
????????location.href?=?openNALocation;? //location.href?打开schema
????}
???? else ?{
????????$( ‘body’ ).append( ‘’ );? //iFrame?打开?schema
????}?
} catch ?(e)?{}
//延迟1000秒
setTimeout( function ?()?{
???? if ?($.os.ios)?{
????????location.href?=?`https: //itunes.apple.com/us/app/idxxxxxxx?mt=8`;
????}
???? else ?{
????????location.href?=?`https: //xxx.xxx.xxx/xxx/xxx.apk`;//直接apk下载link
????}?
},1000)
首先发起跳转Schema
如果没安装App,会打开App失败,没效果
如果安装App,会成功打开App
延迟1000ms
如果没安装App,Schema打开失败,等1000秒后会自动跳转
如果安装App,App会打开,当前网页会被暂停,这延迟代码不会执行
聪明的人会发现,这样有个风险,如果用户打开APP成功后,又手动切回浏览器,那么延迟1000ms的代码依然会执行,安卓会跳出下载apk包得提示,iOS会又再度跳到Appstore,但这个瑕疵也不是太大的问题,所以这种做法被普遍采用,运用在各种安装就跳转,不安装就下载的用户场景。
安卓这么用挺好,iOS有个讨厌的弹框
如果用户没有安装App,那么他一定会经历2个事情
schema打开app,但是失败
延迟后,跳转下载App
在第一个环节,安卓上schema打开失败,没有任何反映,也没有任何提示,一切顺利,但是iOS就不同了。
schema会弹个可恶的跳转失败的框
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !