美文网首页
iOS打开另一个应用及消息传递

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

作者: Storydo | 来源:发表于2016-04-01 18:52 被阅读99次

    系统的沙盒路径

    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";
    }

    相关文章

      网友评论

          本文标题:iOS打开另一个应用及消息传递

          本文链接:https://www.haomeiwen.com/subject/nwsylttx.html