因为苹果的app都是在沙盒中,相互是不能访问数据的。可是苹果仍是给出了一个能够在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可让app相互之间能够跳转的协议。每一个app的URL Scheme都是不同的,若是存在同样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,由于后安装的app的URL Scheme被覆盖掉了,是不能被调用的。
ios
URL Schemes 的发展过程能够说就是 iOS 效率工具类 App 的发展过程。浏览器
起初的苹果创建的 Apple URL Schemes 只是用于自用,里面只有邮件、电话、iTunes 搜索、Youtube 视频等一些内置服务的 URL。app
我的认为 URL Schemes 第一次大火是在 2011 年底(若有异议欢迎指正),那个时期也是越狱的鼎盛时期,那个时期越狱后你们都会装的一个插件是 SBSettings[1]。越狱的人都知道每当新系统发布的时候,等待新系统的越狱发布是最撩人的,而这段时期那些「不越狱就能作到某种越狱功能」的应用常常一时间风头无两。ide
2011年 iOS 5 发布带来了通知中心,没过多久,出现了一大批使用 iOS 系统设置的 URL Schemes 的 App 神奇地完成了接近 SBSettings 的功能——它们可让咱们从通知中心直接跳转到某些 App 的特定界面,好比 Twitter 的发推界面。它们甚至还能够直接跳转到系统设置里的 Wi-Fi 选项。在这一批 App 中,就有现在效率软件霸主之一 Launch Center Pro 的前身——Launch Center。工具
但很快,这一批 App 被苹果火速下架,缘由是「对通知中心的误用」。模糊的解释让开发者们摸不到头脑,这种不满一直延续到 Launcher 在 iOS 8 以后的下架事件。url
总之,在这一批 App 被下架以后,玩票的都离开了,只留下了一个 Launch Center。做者彷佛以为 URL Schemes 大有可为,因此在不触碰红线(当时的红线是一不准动通知中心,二不准调用系统设置的界面)的基础上继续发力,在几个月(2012年7月)以后推出了 Launch Center Pro v1.0。spa
另外一个注意到 iOS 上的 URL Schemes 的做用的是 Drafts 的做者 Greg Pierce。不一样于 Launch Center Pro,Greg Pierce 打造的是一个以输入文字为主的效率应用,它以一个笔记本的面目示人,因此被媒体称为「Launch Center for text」。插件
二者大的区别在于先选动做仍是先输入。Launch Center Pro 的使用方法是:先打开动做,若是须要输入的话,你可让它跳出来一个输入框,你来输入,输入完成后跳转到相应应用。Drafts 则是先在笔记本里把东西输入了,而后再选择动做,跳转到相应应用。code
好像没什么大不了的嘛……吗?这里至少有两个重要的区别:视频
Drafts 中输入过的内容会储存在笔记本中以留做备份,而 Launch Center Pro 里的则是动做运行完了就没了。
Drafts 中输入过的内容能够经过 URL Schemes 进行屡次使用或一次性发给多个应用或服务,而 Launch Center Pro 只能将输入内容发送到一个服务或应用。即除了剪切版外, Launch Center Pro 没有其它变量的概念。
第三个区别不过重要:Launch Center Pro 里的输入框和 Drafts 的笔记本界面来比较很明显不是一个好的写做环境。
细节上的区别还有不少,二者适用的范围随着各自的发展扩大,所以重合的那部分功能也愈发的不起眼。Launch Center Pro 和 Drafts 从那之后成为效率类应用中的双雄,不断提出更多更灵活使用 iOS 上 URL Schemes 的办法。
好比 Launch Center Pro 提出了 List 的概念,将列表的想法融入到了 URL Schemes 中,列表的每一项能够是简单的字符,又能够是一串新的复杂的 URL。使用列表可让咱们每次的输入变为更轻松的选择,对于那些重复的任务更为高效。
而 Drafts 的做者直接不满 URL Schemes 只能跳出不能跳回的问题,和 Marco Arment、Justin Williams 等人开发了 x-callback-URL 来作到跳出,并跳回这样的动做。
能够说这两款 App 对 URL Schemes 的推广和使用构思上的贡献是最突出的,如今 URL Schemes 愈来愈被 iOS 用户和开发者所重视,在我眼里,一款 App 是否完整系统地支持 URL Schemes 已是判断它是否优秀的标志之一。
故事讲到这里,更重要的仍是如何使用 URL Schemes。
故事里没有提到 Pythonista、Editorial 跟 Workflow,毫不是我认为这些 App 不够腕儿,而是它们作的事情重点已经不在于 URL Schemes 了。
那么MobLink网页跳转app指定界面有什么做用呢?咱们所使用的每个app就至关于一个功能,app的跳转可使得每一个app就像一个功能组件同样,帮助咱们完成须要作的事情,好比三方支付,搜索,导航,分享等等。
一、首先在Info.plist中添加一行,选择URL types,效果以下图所示:
二、在展开的Item 0中填写URL identifier,这个用来惟一标识用户自定义的URL Scheme,推荐使用域名的反转形式,如: shenzoom
三、在Item 0中添加新的一行,选择URL Schemes
四、展开URL Schemes,在Item 0中输入自定义的Scheme的名称。在这里只须要输入自定义的Scheme的名称便可,不须要加上://,例如这里输入的是fb149753595510548,那么对应的自定义的URL就是fb149753595510548://,这里能够输入多个。
五、最后一个完整的示例效果图:
一、在Safari中使用
在Safari中直接在浏览器的地址栏中输入shenzoom://,便可启动刚才的应用
二、在其余的应用程序中使用
在须要调用的地方使用下面的代码便可实现调用
NSString *customURL = @"shenzoom://"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
三、参数的传递
NSString *customURL = @"shenzoom://?token=123abct®istered=1"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
在AppDelegate中能够实现下面的方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
上面的方法直接 返回YES 就能够
解析
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if ([sourceApplication isEqualToString:@"com.devzeng.demo.urlscheme"]) { NSLog(@"调用的应用程序的Bundle ID是: %@", sourceApplication); NSLog(@"URL scheme:%@", [url scheme]); NSLog(@"URL query: %@", [url query]); return YES; } else { return NO; } }
在你的动做执行完成了以后,有可能时须要返回到原有app的,这样就须要你的app跳转协议的url里面应该能传入调用者app的跳转协议,这样用户跳转到你的app完成动做后就能跳转回去了
关于 iOS 中常见的白名单的说明能够参考:常见白名单设置
苹果的各项改进一点点蚕蚀了 URL Schemes 的领域,但目前宣告 URL Schemes 死刑还为时尚早。
6s 以后的设备大概都会支持 3D Touch,它的特征之一就是从 Homescreen 的 App 图标上直接进入该 App 的具体某个功能了。这个功能也让不少人兴奋了一把,虽然说会用 URL Schemes 的人早就作到相似的事了。不过,既然官方已经有了这样的功能,为何还要用 URL Schemes?
一样,在 iOS 9 中,咱们还能够用 Siri 创建关于 App 的提醒事项,来作到之前只有用 Launch Center Pro 和 Due 这样的 App 才能作到的定时打开 App。并且 iPhone 6s 还能够作到不在充电状态下使用 Hi, Siri 这样咱们要创建一个提醒事项或者闹铃也无比简单,只要说一声「Hi, Siri. 半小时之后叫我。」就能定一个计时器。在这种比较之下 Due 这样的 App 的做用显然是被大大地削弱了。除此以外还有通知中心部件,Sharesheet 的出现都在必定程度上代替了 URL Schemes 的做用,削弱了其价值。 但按照目前的状态,充其量只能说 URL Schemes 在衰败,还远不能宣判其死刑。
3D Touch 和 URL Schemes 重复的地方只有一部分复杂 URL Schemes 的功能:一些复杂 URL Schemes 的功能 3D Touch 没有涵盖,反过来 3D Touch 也有一些能够作到的事经过复杂 URL Schemes 作不到。但在复杂 URL Schemes 之上的变形 URL Schemes 跟 x-callback-URL 都是 3D Touch 没法作到的。
Siri 确实很是好用,我天天都用它不少次。因此我知道,若是不戴耳机,它是经过扬声器跟你交流的,这种时候它听错了你说错了,都得来回矫情半天,周围有人的话场面会变得很尴尬。因此不少场合,经过 Due 的 URL Schemes,直接从 Dock 中的 Launch Center Pro 里找到一个 Timer 或添加一个提醒其实更舒服。
我认可 URL Schemes 现在已无往日辉煌,但它在 iOS 上的效率方面的做用能不能被彻底替代,目前也未可知。