场景:
- 项目-A 调用 项目-B
- 项目-B 接收到调用,打开对应页面
- 项目-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) {
//返回授权程序成功~
}];
网友评论