LinkedME|Deep Linking技术你真的了解吗

本文作者徐斌,原腾信IOS工程师,现LinkedME高级工程师。



  • SandBox是什么? 

SandBox(沙盒)机制规定应用程序只能够读取应用程序内部的数据,不可以访问其他应用的信息数据。

  1. 在iOS设备中每一个APP都有自己的储存空间
  1. APP只能访问自己的沙盒目录下内容,不能访问其它存储空间的内容
  1. 应用程序的数据请求需要经过权限检测,检测不通过则不执行

  • 为什么要使用沙盒机制?

SandBox是安全体系中的一种机制,从而苹果公司在设计iOS系统时,考虑应用之间的信息安全,对应用程序的访问权限设置限制。


  • 沙盒机制有什么弊端? 

使用沙盒机制后APP之间不能相互访问通信,使得APP成为一个个的信息孤岛。


  • 怎么解决这个问题?

为了解决APP信息孤岛问题,苹果在iOS 4中推出了URI Scheme技术,可以通过特定的URL方式传递参数给另一个APP。例如Uber://pid=3894&source=25,linkedmedemo:/ /id=2351。


  • 怎么配置URI Scheme?

在iOS工程中,打开Info.plist文件,添加URL Types节点即可。在这个节点里,可以自定义协议名称,如linkedmedemo,这个形式的 URI 就会关联到唯品会客户端。众多开发者对URI Scheme已经不再陌生,通常在集成社会化分享组件或深度链接技术服务(知名品牌有友盟和LinkedME)时,必须填写URI Scheme。


  • 代码实现 

在 Info.plist 里面设置完 URL types 之后,就可以在程序中处理这类 URL 的打开请求。在外部程序中,如果打开了指定自定义协议的 URL,程序中 APPlication delegate 的 APPlication:handleOpenURL: 方法就会被调用,在这个方法里,可以获取到触发这个方法的 URL,可以通过对这个URL进行判断,例如根据不同的Host,不同的 Query String 来执行不同的动作。

  1. - (void)APPlication:(UIAPPlication *)APPlication handleOpenURL:(NSURL *)url {
  1. // 在 host 等于 list.vip.com,说明这是唯品会的宝贝详情url,
  1. // 那么就使用本地的 TBItemDetailViewController 来显示
  1. if ([[url host] isEqualToString:@"list.vip.com"]) {
  1. // 这里只是简单地假设 url 形式为 vip://list.vip.com/item.htm?id=xxxxx
  1. // 先获取要查看的宝贝详情的 itemId
  1. NSString *itemId = [[url query] substringFromIndex:[[url query] rangeOfString:@"id="].location+3];
  1. // 使用本地 ViewController 来显示详情
  1. VipItemDetailViewController *controller = [[VipItemDetailViewController alloc] initWithItemId:itemId];
  1. [self.navigationController pushViewController:controller animated:YES];
  1. }
  1. }

  • URL构建 
  1. - (void)showItemInVipForiOS:(NSString *)itemId {
  1. // 构建客户端协议的 URL
  1. NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"vip://list.vip.com/item.htm?id=%@", itemId]];
  1. // 判断当前系统是安装客户端
  1. if ([[UIAPPlication sharedAPPlication] canOpenURL:url]){
  1. // 如果已经安装客户端,就使用客户端打开链接
  1. [[UIAPPlication sharedAPPlication] openURL:url];
  1. } else {
  1. // 否则使用 Mobile Safari 或者内嵌 WebView 来显示
  1. url = [NSURL URLWithString:[NSString stringWithFormat:@"http://list.vip.com/item.htm?id=%@", itemId]];
  1. [[UIAPPlication sharedAPPlication] openURL:url];
  1. }
  1. }

注意:当前唯品会客户端并不支持这样的调用方式,这里仅是一个示例。


  • URI Scheme存在的问题? 

URI Scheme能够实现APP与APP之间的关联,并且是无缝的。例如QQ音乐跳转全民K歌,礼物说跳转淘宝等等。由于H5相对于APP轻量,H5和APP要兼并开发。然而,从微信和微博的内置浏览器查看H5页面时,大部分APP不能够回到APP查看相同的内容。例如知乎、今日头条是可以的。它们需要从Safari打开zhihu://id=2370247&source=zhig才行。

通过Safari跳转,如果用户已安装APP直接跳转到APP中,如果用户没有安装APP则跳转到APP Store中下载,下载完成后打开APP不能到达用户需要的页面。


  • 怎么解决这些问题呢? 

苹果在iOS 9中推出Universal Links(通用连接) 一种能够方便的通过传统 HTTPS 链接来启动 APP, 使用相同的网址打开网站和 APP。

通过唯一的网址, 不需要特别的URI Scheme就可以链接一个特定APP里面的视图 。比如:一个APP分享内容到微信,然后用户在微信内置浏览器中看到H5页面内容,然后用户触发Universal Links后,直接打开APP内相同的页面内容。

NOTE

Universal links let iOS 9 users open your APP when they tap links to your website within WKWebView andUIWebView views and Safari pages, in addition to links that result in a call to openURL:, such as those that occur in Mail, Messages, and other APPs.

For users who are running versions of iOS earlier than 9.0, tAPPing a universal link to your website opens the link in Safari.


  • 怎么使用 Universal Links?

Step1:创建一个JSON 格式的APPle-APP-site-association 文件如下:

  1. {
  1. "APPlinks": {
  1. "APPs": [],
  1. "details": [
  1. {
  1. "APPID": "9JA89QQLNQ.com.APPle.wwdc",
  1. "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
  1. },
  1. {
  1. "APPID": "TeamID.BundleID2",
  1. "paths": [ "*" ]
  1. }
  1. ]
  1. }
  1. }

根据 paths 键设定允许的路径列表, 或只是一个星号如果你想打开 APP 而不管路径是什么。

注意:paths 路径是大小写敏感的

NOTE:The website paths you specify in the paths array are case sensitive.”

“APPID”组成部分:TeamID + BundleId TeamID可以从苹果开发账号页面“Your Account”下查看,BundleId就直接在工程里看了。

Step2:上传 APPle-APP-site-association 文件注意:

1、上传到web server根目录下;

2、web server 需要支持https,客户端需要通告https访问,并且不支持任何重定向;

upload it to the root of your HTTPS web server. The file needs to be accessible via HTTPS—without any redirects—at https:///APPle-APP-site-association. Next, you need to handle universal links in your APP.

Step3:在 APP 里处理通用链接

1、添加域名到 Capabilities在 Xcode 的 capabilities 里 添加你的 APP 域名, 必须用 APPlinks: 前置它

APP从上面的域名请求Step2中创建的JSON 文件 APPle-APP-site-association。当你第一次启动 APP,它会从 https://domain.com/APPle-APP-site-association 下载这个文件。

2.在 APPDelegate 里支持通用链接

实现: - (BOOL)APPlication:(UIAPPlication *)APPlication continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler方法。

当 userActivity 是 NSUserActivityTypeBrowsingWeb 类型, 则意味着它已经由通用链接 API 代理。这样的话, 它保证用户打开的 URL 将有一个非空的 webpageURL 属性。



移动应用实现深度链接需要考虑非常多复杂的情况,比如支持各种手机机型、移动操作系统、浏览器、系统版本等等,还要考虑到深度链接统计分析的诸多问题。这些问题都是建立在用户已经安装APP,如果没有安装APP,用户下载安装,打开APP是否能够看到对应的页面,将是非常困难的问题。

我们正致力于为移动开发者提供稳定、安全、免费的技术服务,帮助APP提高用户增长,当拥有APP拥有流量之后,帮助APP实现流量变现。

参考连接 

1.http://iosdevelopertips.com/cocoa/launching-your-own-APPlication-via-a-custom-url-scheme.html

2.http://blog.csdn.net/ba_jie/article/details/6884818

3.https://www.linkedme.cc/

4.https://developer.APPle.com/library/ios/documentation/General/Conceptual/APPSearch/UniversalLinks.html#//APPle_ref/doc/uid/TP40016308-CH12-SW2

时间: 2024-10-22 12:34:57

LinkedME|Deep Linking技术你真的了解吗的相关文章

这部技术葵花宝典真的很硬核

你有没有经历过:一大早就被疯狂的报警炸醒,由于线上应用 CPU 占用率过高 ...... 你有没有经历过:刚到公司,板凳还没有捂热,收件箱里却一堆的客服投诉邮件,需要你排查日志定位问题 ...... 你有没有经历过:下班的钟声即将敲响,但是你还要加班,进行统计应用每秒.每分钟的峰值等各个指标 ,由于 BOSS 要拿这些指标,在明天的技术大会上对外吹牛 ...... 你有没有经历过:深夜正在酣眠,值班的运维疯狂给你打 CALL,由于线上应用内存出现了问题 ...... 我敢保证上面的场景,大概率你

女人们,这些技术男真的被“双十一”逼“疯”了!

每到"双十一"都是女人购物狂欢日,你家女人是不是都守到电脑前.手机上抢到手抖?但是你有没有想过.这里面支撑这么多人疯狂购物的技术系统码农们都是怎么过的? 前些日子遇到了淘宝的一个技术小二庄卓然(南天).听他嘚啵嘚啵他那些被"双十一"逼疯的事,非常有感触起来. 他和他的技术小二团队.是马云主动求合照的怪咖.是在辣妹热舞面前.也要忙着秒单的"死技术男":婚礼当晚不是洞房,是赶回杭州加班"双十一":在"双十一"让

Java技术——你真的了解String类的intern()方法吗

0.引言 转载请注明出处:http://write.blog.csdn.net/postedit/52291082 什么都先不说,先看下面这个引入的例子: String str1 = new String("SEU")+ new String("Calvin"); System.out.println(str1.intern() == str1); System.out.println(str1 == "SEUCalvin"); 本人JDK版本1

WindowsPhone技术和XNA技术

介于公司目前还没有涉及WP(WindowsPhone)项目的开发,而我本身是学习WP开发的,因此在这里稍微入门的介绍一点WP的知识. 一.简介 Windows Phone具有桌面定制.图标拖拽.滑动控制等一系列前卫的操作体验.其主屏幕通过提供类似仪表盘的体验来显示新的电子邮件.短信.未接来电.日历约会等,让人们对重要信息保持时刻更新.它还包括一个增强的触摸屏界面,更方便手指操作;以及一个最新版本的IE Mobile浏览器——该浏览器在一项由微软赞助的第三方调查研究中,和参与调研的其它浏览器和手机

IT职业发展攻略(技术仅是工具而已)

时光飞逝,我事业中第一个十年就快结束了.在这十年里,让我收获了很多,今天想与大家分享一下,我在 IT 职场方面的一些个人经验,不一定对每个人都实用,请大家仅作参考吧. 大家既然都是做技术的,那我们不妨先从技术这个话题开始说起吧.我要与大家分享的第一点经验就是: 1. 把技术当成工具 技术这东西,其实一点都不神秘,它只不过是一个工具,用这个工具可以帮助我们解决实际问题,就这么简单. 我们每天在面对技术,市面上也有很多技术,真的没有必要把这些技术都拿过来学习一遍,然后想办法找个场景去应用它.如果真的

个人技术规划

1. 关注开源网站.如oschina.chinaunix等. 在开源网站上,经常可以看到一些 有趣的小程序,也可以看到很优秀的 开源程序(nginx等等). 很多人在业余时间选择 刷微博.聊天.玩等等,个人建议业余时间可以花在学习上面! 只有做好“寒窗苦读”的准备,在IT行业才能越飞越高. 励志哥:阿里“扫地僧” http://www.itmian4.com/thread-6253-1-1.html 这里引用一段: 这绝对是一个“比你聪明,还比你努力”的人. 有一次在散步的时候,问他是如何成长为

openseadragon.js与deep zoom java实现艺术品图片展示

openseadragon.js 是一款用来做图像缩放的插件,它可以用来做图片展示,做展示的插件很多,也很优秀,但大多数都解决不了图片尺寸过大的问题. 艺术品图像展示就是最简单的例子,展示此类图片一般要求比较精细,所以图片尺寸很大,如果按照普通的方式直接将整个图片加载,要耗费巨大的带宽. openseadragon.js 即为此而生,它展示的图像,必须经过切割处理,当放大图像时,才去加载更大的尺寸,真正做到了按需加载. 值得一提的是,openseadragon.js是微软公司的一款开源产品,非常

廉价的语音技术

语音和图像.视频一样,是人与人之间沟通的交流方式. 语音信号处理是一门综合性的学科,它与语音学.心理学.数字信号处理.计算机科学.模式识别等有着密切联系. 语音技术一般可以分为三大类: 1.人与人之间的通信:语音增强.语音编码.语音通信.VOIP等 简单的说,以网络为载体,实现人与人之间的语音通信,涉及到语音前端去噪,增强,语音压缩编码等. 语音增强.语音去噪等, 主要解决的是前端问题,单纯的语音.音频处理技术主要应用在嵌入式方向. 语音编码,做标准的很少,单纯做算法的也很少.主要需求集中围绕着

对技术的研究就是对世界的理解

技术研究真的很爽,像吃鸦片一样,虽然我没有吃过,但估计就是那种感觉.当深入研究某一样东西的时候(没有人催,没有estimate),时间过得特别快,其它的事物都不存在一样,除了饿了渴了身体会发出信号外. 这是一种哲学,是格物致知,我们对技术格呀格呀格,就得到了真理了.技术反应了这个世界,了解技术的本质,就是加深对世界的理解.虽然世界有万事万物,但它们终究都会回归到一个相同的地方,会回归一条基本的准则,这是世界运行的基本的方式. 在国内很少见到有专门研究技术的部门,除了在华为看到有这样的部门外(因为