一、URL Scheme
相信大家都知道 URL,例如 http://www.jianshu.com/就是一个URL。在 :// 之前的部分就称为 URL Scheme。
也就是说 http://www.jianshu.com/ 的 URL Scheme 就是 http
URL Scheme 就是一个可以让 app 相互之间可以跳转的协议
1.打开Mail
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto:frank@wwdcdemo.example.com"]]
2.打开电话
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:10086”]];
3.打开SMS
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:10086”]];
4.通过自定义 URL Scheme 向应用传递参数
举例:支付宝的URL Scheme :alipay2018081200218976://safepay/?{“memo":{"result":"","ResultStatus":"6001","memo":"用户中途取消"},"requestType":"safepay"}
二、白名单
1.实际项目里用到的常见白名单。
常见白名单.png2.自定义白名单。
白名单一般是和URL Scheme结合使用的。
废话不多说,直接上代码(app_A里写)
- (void)clickBtn {
NSString *urlString = @"haha://";
// 若有中文传输需要进行转义
NSString *customURL = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
// 检查自定义 URL 是否被定义,如果定义了,则使用 shared application 实例来打开 URL
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) {
// openURL: 方法启动应用并将 URL 传入应用,在此过程中,当前的应用进入后台
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error" message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
}
}
后记:
1.每个app的 URL Scheme 都是不一样的,如果存在一样的 URL Scheme,那么系统就会响应先安装那个app的 URL Scheme,因为后安装的app的 URL Scheme 被覆盖掉了,是不能被调用的。
2.所以这里存在一个漏洞。比如app_A想打开app_B,但是app_C的 URL Scheme和app_B的一样,而且它比app_B先安装。那就永远调不起app_B,除非将app_C卸载。
3.所以自己公司的URLScheme取名时尽量复杂些,这样别人想调起你app的难度就大大增加了。
相关文章:
APP基础功能的配置管理之ATS
APP基础功能的配置管理之屏幕旋转控制
APP基础功能的配置管理之系统权限控制
网友评论