前言:iOS开发中唤醒另外一个App,穿入参数打开特定页面。
- 拼接、解析
- 应用
1.拼接、解析
/** 拼接参数 */
+(NSString *)connectUrl:(NSMutableDictionary *)params url:(NSString *) urlLink;
/** 解析参数 */
+ (NSDictionary *)parameterWithURL:(NSString *)url;
+(NSString *)connectUrl:(NSMutableDictionary *)params url:(NSString *) urlLink{
// 初始化参数变量
NSString *str = @"&";
// 快速遍历参数数组
for(id key in params) {
NSLog(@"key :%@ value :%@", key, [params objectForKey:key]);
/** 拼在后面 */
str = [str stringByAppendingString:key];
str = [str stringByAppendingString:@"="];
str = [str stringByAppendingString:[params objectForKey:key]];
str = [str stringByAppendingString:@"&"];
NSLog(@"===str:%@",str);
}
// 处理多余的&以及返回含参url
if (str.length > 1) {
/** 去掉开头的& */
str = [str substringFromIndex:1];
// 去掉末尾的&
str = [str substringToIndex:str.length - 1];
// 返回含参url
return [urlLink stringByAppendingString:str];
}
return Nil;
}
+ (NSDictionary *)parameterWithURL:(NSString *)url {
/** 分开 请求URL地址 获取参数段 */
NSArray *requestAddresArray = [url componentsSeparatedByString:@"//"];
/** 拆分参数段 */
NSArray *paramTotalArray = [requestAddresArray[1] componentsSeparatedByString:@"&"];
NSMutableDictionary *paramDict = [[NSMutableDictionary alloc]init];
/** 拆分key value */
for (int i = 0; i<paramTotalArray.count; i++) {
NSArray *dictArray = [paramTotalArray[i] componentsSeparatedByString:@"="];
[paramDict setObject:dictArray[1] forKey:dictArray[0]];
}
return paramDict;
}
2.应用
a. 主动唤醒App
NSMutableDictionary *paramDict = [[NSMutableDictionary alloc]init];
/** 来源 */
[paramDict setValue:@"BNN" forKey:@"fromType"];
/** 0 跳转app 1未登录 2预留 */
[paramDict setValue:@"0" forKey:@"jumpType"];
/** 预留字段 */
[paramDict setValue:@"0" forKey:@"type"];
NSString *urlStr = [BNNURLTool connectUrl:paramDict url:@"ComeBuy://"];
NSURL *url = [NSURL URLWithString:urlStr];
[[BNNOpenOtherAppTool shareInstance] shareOpenMallWithUrl:url JumpType:BNNOpenOtherAppToolJumpTypeForMall];
b.被动唤醒App
// NOTE: 9.0以后使用新API接口
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
[self paymentResult:url];
}else if ([url.host isEqualToString:@"pay"]){
return [WXApi handleOpenURL:url delegate:self];
}else{
/** 跳转指定界面 */
//ComeBuy://goodsID=%@
// [[NNHProjectControlCenter sharedControlCenter].userControl logOut];
if(url){
//显示一下从A获取的url,url = projectB://openBSecondPage,host = openBSecondPage
NSLog(@"======= openURl:%@ ========",url);
NSString *valueStr= [NSString stringWithFormat:@"url = %@,host = %@",[url absoluteString],[url host]];
//根据传过来的url的host进行一些操作
NSDictionary *paramDict = [BNNURLTool parameterWithURL:[NSString stringWithFormat:@"%@",url]];
NSLog(@"=== URL参数字典:%@",paramDict);
if ([paramDict[@"fromType"] isEqualToString:@"BNN"]) {
if ([paramDict[@"jumpType"] isEqualToString:@"0"]) {
[[NNHProjectControlCenter sharedControlCenter].userControl logOut];
UITabBarController *baseTabBar = (UITabBarController *)self.window.rootViewController;
UINavigationController *nav = baseTabBar.viewControllers[baseTabBar.selectedIndex];
NNHAppDelegate *app = (NNHAppDelegate *)[UIApplication sharedApplication].delegate;
UIViewController *controller = app.window.rootViewController;
NNHTabBarController *rvc = (NNHTabBarController *)controller;
[rvc setSelectedIndex:0];
[nav popToRootViewControllerAnimated:YES];
}else if ([paramDict[@"jumpType"] isEqualToString:@"1"]){
}
}else if ([paramDict[@"fromType"] isEqualToString:@"LGB"]){
[[NNHProjectControlCenter sharedControlCenter].userControl logOut];
if (paramDict[@"type"] && [paramDict[@"type"] length]>0) {
/** 跳转商品详情 */
UITabBarController *baseTabBar = (UITabBarController *)self.window.rootViewController;
MYDSelfOperateDetailViewController *vc = [[MYDSelfOperateDetailViewController alloc]initWithGoodsId:paramDict[@"type"]];
vc.hidesBottomBarWhenPushed = YES;
[baseTabBar.viewControllers[baseTabBar.selectedIndex] pushViewController:vc animated:NO];
}else{
UITabBarController *baseTabBar = (UITabBarController *)self.window.rootViewController;
UINavigationController *nav = baseTabBar.viewControllers[baseTabBar.selectedIndex];
NNHAppDelegate *app = (NNHAppDelegate *)[UIApplication sharedApplication].delegate;
UIViewController *controller = app.window.rootViewController;
NNHTabBarController *rvc = (NNHTabBarController *)controller;
[rvc setSelectedIndex:0];
[nav popToRootViewControllerAnimated:YES];
}
}
}
}
return YES;
}