一、踩坑反思
- 起因:调试跳转第三方App时,无法跳转。
- 过程:在
URL Types
中添加Schemes
进行模拟跳转,上传开发代码到git
时未能及时删除模拟代码,导致对第三方App造成影响,用户想跳转第三方App时跳转到了我们的App。 - 结果:删除
URL Types
中第三方Schemes,强升进行挽救,此处反思记录。
针对此次造成的影响,对info.plist
中的URL Types
和LSApplicationQueriesSchemes
进行详细说明,共勉。
二、LSApplicationQueriesSchemes
1. 附上LSApplicationQueriesSchemes
白名单配置:
2. 跳转代码
当我们想跳转第三方应用时,通常使用如下方法直接跳转:
NSURL *appUrl = [NSURL URLWithString:@"weixin://"];
[[UIApplication sharedApplication] openURL:appUrl];
或者先判断再进行跳转:
NSURL *appUrl = [NSURL URLWithString:@"weixin://"];
BOOL appIsExist = [[UIApplication sharedApplication] canOpenURL:appUrl];
if (appIsExist) {
[[UIApplication sharedApplication] openURL:appUrl];
}
- 当我们使用
canOpenURL:
判断手机内是否安装此App时,则必须在LSApplicationQueriesSchemes
白名单中配置第三方Scheme:weixin
,否则无法跳转,报错-canOpenURL: failed for URL: "weixin://" - error: "This app is not allowed to query for scheme weixin"
。- 但是当仅使用
openURL:
时跳转无限制。- 此处建议使用
canOpenURL:
进行跳转判断,提前发现问题,规避问题。
三、URL types
1. 附上URL Types
配置:
2. URL types
说明
a. 设置方式:
项目 -> info -> URL types -> URL Schemes
,设置后就拥有了自己应用的标识scheme
,
注意:
URL Schemes
是一个可以让 app 相互之间可以跳转的协议。每个 app 的URL Scheme
都是不一样的,如果存在一样的Scheme
,那么系统就会响应先安装的那个 app 的Scheme
,因为后安装的 app 的Scheme
被覆盖掉了,是不能被调用的。
b. 配置说明:
URL types
:
URL Schemes
:
URL Identifier
:是自定义的URL Schemes
名字,一般采用翻转域名的方法保证该名字的唯一性,也可以不设置,若设置必须保证唯一性。
3. 验证
在Safari浏览器中,输入scheme://
,若能打开,则配置URL Schemes
:成功。
四、总结
Scheme
跳转是iOS APP通信最常用到的通信方式,APP1通过openURL
: 跳转到APP2,并且可以在URL中带上想要的参数,有点类似HTTP
的get
请求。URL types
里的字段是为了让别的应用能调起你自己的app,而LSApplicationQueriesSchemes
里的字段是让系统允许你自己的app调起第三方app的。就相当于你LSApplicationQueriesSchemes
中的字段是别人app中的URL types
字段,而你URL types
中的字段就是别人app中的LSApplicationQueriesSchemes
中的字段。
此处重复强调:
URL Schemes
是一个可以让 app 相互之间可以跳转的协议。每个 app 的URL Scheme
都是不一样的,若配置与其它App一样的URL Scheme
,那么系统就会响应先安装的那个 app 的URL Scheme
,后安装的 app 的URL Scheme
会被覆盖掉,不能被调用。因此配置URL type -> URL Schemes
时一定要慎重再慎重,避免影响第三方App使用。
五、规避措施
即使有组内代码Review,但是在上传git时,必须对代码进行自我Review,任何调试代码不得上传git,若必须要上传提供测试,则新建不合并的临时分支。