iOS打开另一个应用及消息传递

2016-04-01  本文已影响99人  Storydo

系统的沙盒路径

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";
}
上一篇下一篇

猜你喜欢

热点阅读