iOS开发拼接、解析请求URL

前言: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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值