你所知道好玩有趣的 iOS URL schemes 有哪些
https://www.zhihu.com/question/19907735
系统的沙盒路径
iOS系统在不越狱情况相对来说是安全一些。系统中每个应用都有自己的沙盒路径,且不越狱情况下,不能访问不属于自己的沙盒路径(访问系统应用除外)。这样的设计保证了应用的安全,不过也带来了一些不方便。
打开另一个应用
系统考虑到这样的局限性,提供了一些方法,可以让一个应用,调用另一个应用的功能。
- (BOOL)openURL:(NSURL*)url;
- (BOOL)canOpenURL:(NSURL *)url;
第二个方法是用来检查被访问应用是否能打开。
调用系统应用的一些方法
有时候需要访问一些系统的应用,比如打开浏览器,拨打电话或者发送短信之类的。
*拨打电话*
NSURL * url = [NSURL URLWithString:@"tel://10010"];
*发送信息*
NSURL * url = [NSURL URLWithString:@"sms://10010"];
*打开浏览器*
NSURL * url = [NSURL URLWithString:@"https://www.baidu.com"];
*发送邮件*
NSURL * url = [NSURL URLWithString:@"mailto://10010@qq.com"];
最后调用下边方法执行
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
调用非系统应用
如果调用的应用为非系统应用,就需要做一些相应的配置来实现这一功能,例如像微信支付,支付宝支付,微博分享之类的功能,都是需要把一些信息传递给另一个应用,剩余的工作交给另一个应用完成,处理完成之后返回一个结果信息。
举个粟子
sourceApp打开testApp,
则首先在testApp中设置URLType自己的唯一标识,用于在系统中注册自己,以便于其它应用来打开自己。
在infor.plist中添加URLType,其中URL identifier是自己的唯一标识,URL Schemes可以设置多个,类似于系统的sms tel http。
本例中,testApp的URL Schemes设置为testApp,剩下的就需要在sourceApp中打开了,在iOS9中,为了安全起见,有打开应用的白名单设置,因为有的应用会恶意遍历手机中所有的应用。
在sourceApp中的info.plist中添加LSApplicationQueriesSchemes字段,该字段是一个数组,在其中添加testApp,其实不添加也可以打开,只不过不添加调用canOpenURL:url会直接返回false.
打开testApp之后,不同版本的操作系统调用的方法不同,iOS9会调用以下方法,iOS8及以下调用方法与此不同。
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
其中url为打开本应用使用的url,可以携带一些信息。options字典为一些参数信息,如下
{ UIApplicationOpenURLOptionsOpenInPlaceKey = 0; UIApplicationOpenURLOptionsSourceApplicationKey = "com.yoxnet.testDemo";}
文/Storydo(简书作者)原文链接:http://www.jianshu.com/p/33fadc813966著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。