内容简介:URL Scheme是如何实现app之间的跳转
项目演示
URL Scheme是什么
由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。
URL Schemes 的发展
URL Schemes 的发展过程可以说就是 iOS 效率 工具 类 App 的发展过程。
起初的苹果建立的 Apple URL Schemes 只是用于自用,里面只有邮件、电话、iTunes 搜索、Youtube 视频等一些内置服务的 URL。
个人认为 URL Schemes 第一次大火是在 2011 年末(如有异议欢迎指正),那个时期也是越狱的鼎盛时期,那个时期越狱后大家都会装的一个插件是 SBSettings[1]。越狱的人都知道每当新系统发布的时候,等待新系统的越狱发布是最撩人的,而这段时期那些「不越狱就能做到某种越狱功能」的应用经常一时间风头无两。
2011年 iOS 5 发布带来了通知中心,没过多久,出现了一大批使用 iOS 系统设置的 URL Schemes 的 App 神奇地完成了接近 SBSettings 的功能——它们可以让我们从通知中心直接跳转到某些 App 的特定界面,比如 Twitter 的发推界面。它们甚至还可以直接跳转到系统设置里的 Wi-Fi 选项。在这一批 App 中,就有如今效率软件霸主之一 Launch Center Pro 的前身——Launch Center。
但很快,这一批 App 被苹果火速下架,原因是「对通知中心的误用」。模糊的解释让开发者们摸不到头脑,这种不满一直延续到 Launcher 在 iOS 8 之后的下架事件。
总之,在这一批 App 被下架之后,玩票的都离开了,只留下了一个 Launch Center。作者似乎觉得 URL Schemes 大有可为,所以在不触碰红线(当时的红线是一不许动通知中心,二不许调用系统设置的界面)的基础上继续发力,在几个月(2012年7月)之后推出了 Launch Center Pro v1.0。
另一个注意到 iOS 上的 URL Schemes 的作用的是 Drafts 的作者 Greg Pierce。不同于 Launch Center Pro,Greg Pierce 打造的是一个以输入文字为主的效率应用,它以一个笔记本的面目示人,所以被媒体称为「Launch Center for text」。
两者大的区别在于先选动作还是先输入。Launch Center Pro 的使用方法是:先打开动作,如果需要输入的话,你可以让它跳出来一个输入框,你来输入,输入完成后跳转到相应应用。Drafts 则是先在笔记本里把东西输入了,然后再选择动作,跳转到相应应用。
好像没什么大不了的嘛……吗?这里至少有两个重要的区别:
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
1、首先在Info.plist中添加一行,选择URL types,效果如下图所示:
2、在展开的Item 0中填写URL identifier,这个用来唯一标识用户自定义的URL Scheme,推荐使用域名的反转形式,如: shenzoom
3、在Item 0中添加新的一行,选择URL Schemes
4、展开URL Schemes,在Item 0中输入自定义的Scheme的名称。在这里只需要输入自定义的Scheme的名称即可,不需要加上://,例如这里输入的是fb149753595510548,那么对应的自定义的URL就是fb149753595510548://,这里可以输入多个。
最后一个完整的示例效果图:
使用URL Scheme
1、在Safari中使用
在Safari中直接在浏览器的地址栏中输入shenzoom://,即可启动刚才的应用
2、在其他的应用程序中使用
在需要调用的地方使用下面的代码即可实现调用
NSString *customURL = @"shenzoom://";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
3、参数的传递
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 的领域,但目前宣告 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 上的效率方面的作用能不能被完全替代,目前也未可知。
以上所述就是小编给大家介绍的《URL Scheme是如何实现app之间的跳转》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 多台 CentOS 之间实现简单的文件共享
- 实现HBase与Hive之间数据互通互导
- 实现小程序和H5页面之间互相跳转
- Java Bean与Map之间相互转化的实现
- 通过$listeners、inheritAttrs、$attr实现组件之间的数据通信
- 使用Golang实现MySQL数据库之间的表同步
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。