美文网首页
ios - app之间互相调用

ios - app之间互相调用

作者: 捕梦少女的梦想 | 来源:发表于2019-01-17 12:25 被阅读0次

    场景:

      1. 项目-A 调用 项目-B
      1. 项目-B 接收到调用,打开对应页面
      1. 项目-B操作完成之后,返回给项目-A

    实现:

    • CFBundleURLType设置标识。
    • LSApplicationQueriesSchemes设置白名单-iOS9之后引入。

    用意:

    当前App允许访问的App有哪些,即白名单。需要通信双方均设置为对方的scheme,否则当调用对方App时,系统会告诉你This app is not allowed to query for scheme。
    调用者和被调用者均需要设置白名单,一方想调用,另一方需要也知道将被你调用 ,更为安全。


    • 项目-A标识为@“back”,白名单为@“tempApp”,info.plist文件配置如下:

    1.Target -> Info -> URL Types -> URL Schemes -> @"back"
    2.LSApplicationQueriesSchemes(类型为array) -> @"tempApp"

    @“back”为项目-A 的标识,白名单内容为项目-B的标识“ tempApp”
    @"tempApp"为项目-B的标识,白名单内容为项目-A的标识“ back”

    • 项目-B标识为@“ tempApp”,白名单为@“ back”,info.plist文件配置如下:

    1.Target -> Info -> URL Types -> URL Schemes -> @"tempApp"
    2.LSApplicationQueriesSchemes(类型为array) -> @"back"

    • 项目-A 调用 项目-B

    • 调用实现
    - (void)evokeAppAction {
        NSString *customURL = @"tempApp://"; //tempApp = 自定义标示符
        
        if ([[UIApplication sharedApplication]
             canOpenURL:[NSURL URLWithString:customURL]])
        {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL] options:@{@"key":@"value"} completionHandler:nil];
        } else {
    //
        }
    }
    
    • 项目-B 接收到调用,打开对应页面

    在Appdelegate.m 文件中实现:

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
      if ([[url absoluteString] containsString:@"tempApp"]) {
    // 进行对应页面跳转  
      }
      return YES;
    }
    
    • 项目-B操作完成之后,返回给项目-A

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"back://"] options:dataDic completionHandler:^(BOOL success) {
          //返回授权程序成功~
        }];
    
    至此,就可以愉快的从项目A和项目B互相调用了。

    相关文章

      网友评论

          本文标题:ios - app之间互相调用

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