MobLink网页跳转app指定界面技术简介之 URL Scheme

URL Scheme是什么

  因为苹果的app都是在沙盒中,相互是不能访问数据的。可是苹果仍是给出了一个能够在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可让app相互之间能够跳转的协议。每一个app的URL Scheme都是不同的,若是存在同样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,由于后安装的app的URL Scheme被覆盖掉了,是不能被调用的。
  ios

URL Schemes 的发展

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 了。
  

URL Scheme有什么做用

  那么MobLink网页跳转app指定界面有什么做用呢?咱们所使用的每个app就至关于一个功能,app的跳转可使得每一个app就像一个功能组件同样,帮助咱们完成须要作的事情,好比三方支付,搜索,导航,分享等等。

建立URL Scheme

一、首先在Info.plist中添加一行,选择URL types,效果以下图所示:

二、在展开的Item 0中填写URL identifier,这个用来惟一标识用户自定义的URL Scheme,推荐使用域名的反转形式,如: shenzoom

三、在Item 0中添加新的一行,选择URL Schemes

四、展开URL Schemes,在Item 0中输入自定义的Scheme的名称。在这里只须要输入自定义的Scheme的名称便可,不须要加上://,例如这里输入的是fb149753595510548,那么对应的自定义的URL就是fb149753595510548://,这里能够输入多个。
五、最后一个完整的示例效果图:

使用URL Scheme

一、在Safari中使用
在Safari中直接在浏览器的地址栏中输入shenzoom://,便可启动刚才的应用

二、在其余的应用程序中使用
在须要调用的地方使用下面的代码便可实现调用

NSString *customURL = @"shenzoom://";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];

三、参数的传递

NSString *customURL = @"shenzoom://?token=123abct&registered=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 的领域,但目前宣告 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 上的效率方面的做用能不能被彻底替代,目前也未可知。

相关文章
相关标签/搜索