iOS 通过url Scheme 打开App并传参

iOS 通过url Scheme 打开App并传参

闲话就不多说了直接上代码了,以微信分享为例,参数包含title、content、url,以及type(判断是好友还是朋友圈)

打开App:

NSDictionary *dic = @{};
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"share://param?type=0&title=6ZKx6KKL5a2Q&content=6YKA6K+356CB5pivMzMz&url=http://www.baidu.com"] options:dic completionHandler:nil];

参数拼接在问号后面,其实和GET请求拼接参数的方式是一样的

注意:参数不能包含中文,如果想使用中文,可将中文进行base64编码后再进行拼接,使用的时候做一个解码即可

接收代码:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    
    NSString *urlStr = [url absoluteString];
    if ([urlStr hasPrefix:@"share://"]) {
        //把?号前面的数据替换为空,是方便后续字符串以&符号来分割
        NSString *parameter = [urlStr stringByReplacingOccurrencesOfString:@"share://param?" withString:@""];
        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:parameter, @"parameter", nil];
        //此处是外部请求后需要处理的事件,将参数传递下去即可
        [HQTool share:dic];
    }
    return YES;
}

参数解析:

+ (void)share:(NSDictionary *)dic {
    NSString *parameter = dic[@"parameter"];
    //根据&符号将字符串分割成数组
    NSArray *arr = [parameter componentsSeparatedByString:@"&"];
    
    NSString *type = @"";
    NSString *title = @"";
    NSString *content = @"";
    NSString *url = @"";
    
    for (NSString *item in arr) {
        NSArray *keyArr = [item componentsSeparatedByString:@"="];
        for (NSString *key in keyArr) {
            if ([key isEqualToString:@"type"]) {
                type = keyArr[1];
            }
            if ([key isEqualToString:@"title"]) {
                //base64解码
                NSData *data = [[NSData alloc] initWithBase64EncodedString:keyArr[1] options:0];
                title  = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            }
            if ([key isEqualToString:@"content"]) {
                NSData *data = [[NSData alloc] initWithBase64EncodedString:keyArr[1] options:0];
                content  = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            }
            if ([key isEqualToString:@"url"]) {
                url = keyArr[1];
            }
            
        }
    }
}

参数拿到后,便可以实现后面的功能了。

提醒:如果打开App后需要进行跳转页面或者跳转微信,感觉很慢的话,可以将代码放到主线程中去执行,这样就会瞬间执行

补充:base64编码

//base64编码
- (NSString *)encodeString:(NSString *)string {
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSString *encodedStr = [data base64EncodedStringWithOptions:0];
    return encodedStr;
}