一、简单使用
URL Scheme是能让其它APP通过连接来访问你的APP的一个比较特殊的URL。
在项目 > TARGETS > info > URL Types 设置你的APP URL Scheme如下图:
然后在浏览器中输入连接mytestapp://
搜索就会进入AppDelegate的代理方法(iOS 9.0+)
也可以设置参数:mytestapp://aa?key=value
以上通过safari浏览器调用起我们的APP,但在实际开发其它APP如果想通过URL Scheme调用起这个APP需要额外设置该APP的URL Scheme白名单(具体看第二部分内容)。比如这时另外创建一个项目通过以下方法调用时会出现如下图中的错误:
NSURL *url = [NSURL URLWithString:@"mytestapp://aa?key=value"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:url];
}
}
这新项目info.plist文件中添加之前APP的 scheme 白名单就可以正常跳转了:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>mytestapp</string>
</array>
二、URL Scheme白名单设置
当你的APP要调用其它APP时,你需要给这些APP设置对应的URL Scheme白名单。
问题描述:
在iOS9下涉及到平台客户端跳转,系统会自动到项目info.plist下检测是否设置平台Scheme。对于需要配置的平台,如果没有配置,就无法正常跳转平台客户端。
应用场景:
支持客户端的分享和授权,跳转三方地图导航等需要配置Scheme白名单。
具体方法:
1、在项目的info.plist中添加LSApplicationQueriesSchemes
,类型为数组。
2、然后给它添加需要支持的项目,类型为字符串类型。
注意:
1、在iOS9中,如果没有添加需要的Scheme白名单,系统会打印类似如下提示:
-canOpenURL: failed for URL: "baidumap://" - error: "This app is not allowed to query for scheme baidumap"
-canOpenURL: failed for URL: "iosamap://" - error: "This app is not allowed to query for scheme iosamap"
-canOpenURL: failed for URL: "qqmap://" - error: "This app is not allowed to query for scheme qqmap"
(也说明了客户端中使用了-canOpenURL:
方法)
2、如果添加了需要的Scheme白名单,系统依然会打印类似如下信息,说明你的手机未安装对应的APP。
-canOpenURL: failed for URL: "baidumap://" - error: "未能完成操作。(“OSStatus”错误 -10814。)"
-canOpenURL: failed for URL: "qqmap://" - error: "未能完成操作。(“OSStatus”错误 -10814。)"
3、上面两点是客户端需要打开三方地图导航的例子,在分享、授权操作中也是,在一些接入文档中也是说明得很详细。