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 的白名单问题)