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;
}

人已赞赏
iOS文章

iOS项目的静态代码扫描之OClint安装

2020-3-28 13:46:48

iOS文章

Swift UIButton(按钮)添加点击事件

2020-3-28 19:18:02

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索