这几天,由于版本更迭,使用xcode 7打包,在处理白名单时,遇到了一些问题。
主要如下,被跳转的App没有添加跳转app的URL scheme至白名单,那么为什么能够回跳。
1、使用Xcode 7 打包的工程,在iOS9系统中运行打开其他app时,会遇到白名单的问题。
主要报错如下
-canOpenURL: failed for URL: “weibo://” - error: “This app is not allowed to query for scheme weibo”
为什么会有这个报错?
iOS 9 通过白名单的机制对呼起的app进行过滤,如果某App不在白名单中,则执行 canOPenUrl时,此App不能够被呼起,返回值为false。
2、如何解决
在工程文件的plist中,增加LSApplicationQueriesSchemes的键值对,即可。
常用的app的URL Scheme如下。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
<!-- 新浪微博 URL Scheme 白名单-->
<string>sinaweibohd</string>
<string>sinaweibo</string>
<string>sinaweibosso</string>
<string>weibosdk</string>
<string>weibosdk2.5</string>
<!-- QQ、Qzone URL Scheme 白名单-->
<string>mqqapi</string>
<string>mqq</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqconnect</string>
<string>mqqopensdkdataline</string>
<string>mqqopensdkgrouptribeshare</string>
<string>mqqopensdkfriend</string>
<string>mqqopensdkapi</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdkapiV3</string>
<string>mqzoneopensdk</string>
<string>wtloginmqq</string>
<string>wtloginmqq2</string>
<string>mqqwpa</string>
<string>mqzone</string>
<string>mqzonev2</string>
<string>mqzoneshare</string>
<string>wtloginqzone</string>
<string>mqzonewx</string>
<string>mqzoneopensdkapiV2</string>
<string>mqzoneopensdkapi19</string>
<string>mqzoneopensdkapi</string>
<string>mqzoneopensdk</string>
<string>alipay</string>
<string>alipayshare</string>
</array>
3、 我的疑问
大家有没有考虑一个问题,继续分享的时候,微信或微博肯定没有添加你的app的URL Scheme,那么他们又是如何返回你的应用的呢?
经过测试,原因如下,
白名单机制,主要针对的是canOpenURL 找个函数。而OpenUrl是不受白名单限制的,也就是说
当我们使用
if([self canOpenUrl:test]){ [ self openUrl:test]} 时,由于test未添加至白名单,所以返回false,无法打开。
但是直接使用 [self openURL:test]是可以打开的。这也就是为什么分享之后,能够跳回的原因。
4、
当然,一般打开app,需要通过canOpen进行判断,否则,会发生没有响应的情况。联机调试会发现,打开的app未NULL的报错。