iOS中的App是一个信息孤岛,相互是不可以进行通信的。但是iOS的APP可以注册自己的URL Scheme,从而实现App之间互相调用,并且传递一些参数。
实现步骤:
1、添加一个URL协议:TARGETS --> info --> URL Types --> 添加URL协议
2、填写URL Schemes(协议头,要求唯一,如微信的是:weixin://),此处测试写入:demo;
3、填写Identifier(可选),通常写入Bundle ID,此处测试写入:com.admin.Demo。
URL Schemes.png
到此,已经配置好URL Schemes,现在可以测试看看设置的URL Schemes是否有效。打开Safari,在地址栏里输入:demo://(也可以在地址栏中输入:demo://com.admin.Demo)。如需传入参数,链接可写成这样:demo://com.admin.Demo?key1=value1&key2=value2,然后通过下边方法接收url并解析参数:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// Add any custom logic here.
NSString *urlStr = url.absoluteString;
if([urlStr hasPrefix:@"demo://com.admin.Demo"]) {
NSRange range = [urlStr rangeOfString:@"?"];
if (range.location != NSNotFound) {
NSMutableDictionary *infoDict = [NSMutableDictionary dictionary];
NSString *paramStr = [urlStr substringFromIndex:range.location +1];
NSArray *paramsArr = [paramStr componentsSeparatedByString:@"&"];
for (int i = 0; i <paramsArr.count; i++) {
NSString *tmpStr = paramsArr[i];
NSRange rangeTmp = [tmpStr rangeOfString:@"="];
NSString *keyStr = [tmpStr substringToIndex:rangeTmp.location];
NSString *valueStr = [tmpStr substringFromIndex:rangeTmp.location +1];
[infoDict setValue:valueStr forKey:keyStr];
}
// 操作infoDict
}
return YES;
}
return NO;
}
另:
协议头URL Schemes:也可以写作www.alipay.com(一个网址,对应或可跳转一个APP下载页面)。
网友评论