ios - app之间互相调用

场景:

    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互相调用了。

推荐阅读更多精彩内容