iOS9|iOS9 的白名单问题


这几天,由于版本更迭,使用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如下。


LSApplicationQueriesSchemes

wechat
weixin



sinaweibohd
sinaweibo
sinaweibosso
weibosdk
weibosdk2.5


mqqapi
mqq
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqqwpa
mqzone
mqzonev2
mqzoneshare
wtloginqzone
mqzonewx
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqzoneopensdk

alipay
alipayshare





3、 我的疑问
大家有没有考虑一个问题,继续分享的时候,微信或微博肯定没有添加你的app的URL Scheme,那么他们又是如何返回你的应用的呢?

经过测试,原因如下,
白名单机制,主要针对的是canOpenURL 找个函数。而OpenUrl是不受白名单限制的,也就是说
当我们使用
if([self canOpenUrl:test]){ [ self openUrl:test]} 时,由于test未添加至白名单,所以返回false,无法打开。
但是直接使用 [self openURL:test]是可以打开的。这也就是为什么分享之后,能够跳回的原因。


4、
当然,一般打开app,需要通过canOpen进行判断,否则,会发生没有响应的情况。联机调试会发现,打开的app未NULL的报错。
【iOS9|iOS9 的白名单问题】

    推荐阅读