iOS开发分享之“白名单”

转载 2016年05月30日 11:28:40

本文转自:http://www.2cto.com/kf/201602/489546.html

WWDC 2015 Session 703: "Privacy and Your App ( 时间在30:18左右)关于 URL scheme 的介绍,指出:

enter image description here

也就是说:在iOS9中,如果使用 canOpenURL: 方法,该方法所涉及到的 URL scheme 必须在"Info.plist"中将它们列为白名单,否则不能使用。key叫做LSApplicationQueriesSchemes ,键值内容是

LSApplicationQueriesSchemes

 urlscheme
 urlscheme2
 urlscheme3
 urlscheme4
 

  

白名单上限是50个:

WWDC 2015 Session 703: "Privacy and Your App )有说明:

“So for apps that are linked before iOS 9 and are running on iOS 9, they will be given 50 distinct URL schemes.” -- WWDC 2015 session 703 Privacy and Your App

 

iOS9中 openURL: 方法没有什么实质性的变化,仅仅多了一个确认动作:

enter image description here

苹果为什么要这么做?

在 iOS9 之前,你可以使用 canOpenURL: 监测用户手机里到底装没装微信,装没装微博。但是也有一些别有用心的 App ,这些 App 有一张常用 App 的 URL scheme,然后他们会多次调用canOpenURL: 遍历该表,来监测用户手机都装了什么 App ,比如这个用户装了叫“大姨妈”的App,你就可以知道这个用户是女性,你就可以只推给这个用户女性用品的广告。这是侵犯用户隐私的行为。

这也许就是原因。

本项目中给出了一个演示用的 Demo ,仓库的文件夹叫“Demo3_iOS9URLScheme适配_引入白名单概念”,Demo引用自LSApplicationQueriesSchemes-Working-Example

Demo结构如下:

enter image description here

主要演示的情景是这样的:

假设有两个App: weixin(微信) and 我的App. 我的App 想监测 weixin(微信) 是否被安装了. "weixin(微信)" 在 info.plist 中定义了 URL scheme :

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>weixin</string>
        </array>
    </dict>
</array>

我的App 想监测 weixin(微信) 是否被安装了 :

[[UIApplication sharedApplication]
                    canOpenURL:[NSURL URLWithString:@"weixin(微信)://"]];

  

即使你安装了微信,在iOS9中,这有可能会返回NO:

因为你需要将 "weixin(微信)" 添加到 “我的App” 的 info.plist 文件中:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>weixin</string>
</array>

(以上只是为了演示,实际开发中,你不仅需要添加“weixin”还需要“wechat”这两个。具体下文给出表格)

另外,推荐一篇博文,其中最关键的是以下部分:

If you call the “canOpenURL” method on a URL that is not in your whitelist, it will return “NO”, even if there is an app installed that has registered to handle this scheme. A “This app is not allowed to query for scheme xxx” syslog entry will appear.

 

常见 URL Scheme

如果想一次性集成最常用的微信、新浪微博、QQ、支付宝四者的白名单,则配置如下:

 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


  

plist 文件看起来会是这样的:

enter image description here

其他平台可在下面的列表中查询: 各平台OpenURL白名单说明

平台名称 URL Schem 补充说明
微信 wechat,

 

weixin
 
支付宝 alipay,

 

alipayshare
 
QQ mqqOpensdkSSoLogin,

 

mqqopensdkapiV2,

 

mqqopensdkapiV3,

 

wtloginmqq2,

 

mqq,

 

mqqapi
 
QZONE mqzoneopensdk,

 

mqzoneopensdkapi,

 

mqzoneopensdkapi19,

 

mqzoneopensdkapiV2,

 

mqqOpensdkSSoLogin,

 

mqqopensdkapiV2,

 

mqqopensdkapiV3,

 

wtloginmqq2,

 

mqqapi,

 

mqqwpa,

 

mqzone,

 

mqq
[注:若同时使用QQ和QZONE,则直接添加本格即可]
新浪微博 sinaweibo,

 

sinaweibohd,

 

sinaweibosso,

 

sinaweibohdsso,

 

weibosdk,

 

weibosdk2.5
[后两个若导入新浪SDK则需要]
豆瓣 无需配置  
开心网 无需配置  
易信 yixin,

 

yixinopenapi
 
Google+ googlechrome,

 

googlechrome-x-callback,

 

hasgplus4,

 

com.google.gppconsent,

 

com.google.gppconsent.2.2.0,

 

com.google.gppconsent.2.3.0,

 

com.google.gppconsent.2.4.0,

 

com.google.gppconsent.2.4.1
 
人人网 renrenapi,

 

renrenios,

 

renreniphone,

 

renren,
 
Facebook 见下文  
Twitter 无需配置  
Pocket pocket-oauth-v1  
Pinterest pinit  
Instagram instagram  
WhatsApp whatsapp  
Line line  
KakaoTalk kakaolink  
KaokaoStory storylink  
LinkedIn 无需配置  
Tumblr 无需配置  
非平台类 无需配置 ( 如短信,复制,邮件等)

另外, Facebook 的URL Scheme白名单需要注意:

如果 SDK 版本低于 4.5 应补充

LSApplicationQueriesSchemes

    fbapi
    fbapi20130214
    fbapi20130410
    fbapi20130702
    fbapi20131010
    fbapi20131219    
    fbapi20140410
    fbapi20140116
    fbapi20150313
    fbapi20150629
    fbauth
    fbauth2
    fb-messenger-api20140430

如果使用 FBSDKMessengerShareKit,还要加上

fb-messenger-platform-20150128
fb-messenger-platform-20150218
fb-messenger-platform-20150305

 

如果使用SDK版本高于4.6,则只需要加上

LSApplicationQueriesSchemes

        fbapi
        fb-messenger-api
        fbauth2
        fbshareextension

iOS URL Schemes白名单配置

转:http://www.jianshu.com/p/a8cce94d508e https://github.com/ChenYilong/iOS9AdaptationTips/commit/a6b...
  • baidu_31071595
  • baidu_31071595
  • 2016年03月10日 17:56
  • 2244

iOS 修改HTTPS 添加白名单 ; 直接进行http访问

由于iOS9 更新,限制HTTP协议的访问,需要在info.list中设置白名单才能检测其他程序是否安装。 当你的应用在iOS9 中需要使用QQ/QQ空间/支付宝/微信 SDK 时,需要在info....
  • jhq2214
  • jhq2214
  • 2016年11月20日 11:05
  • 2713

常用白名单 iOS

key>LSApplicationQueriesSchemeskey> array> string>wechatstring> string>weixinstring> ...
  • Chowbindeblog
  • Chowbindeblog
  • 2016年05月13日 10:53
  • 567

应用白名单plist

  • 2016年01月04日 11:57
  • 2KB
  • 下载

iOS9适配http,微信、qq、支付宝添加白名单

: 一、网络适配由http改成https     苹果官方对App Transport Security Technote的解释如下:     翻译成中文的意思就是说:iOS9.0SDK在编译的时...
  • SHTLoveXX
  • SHTLoveXX
  • 2015年09月24日 10:22
  • 9745

ios跳转到系统设置界面及白名单的设置

最近一段时间在做推送,关于从自己app跳转到系统设置页面的方法可谓众说纷纭,以下针对不同的ios版本以及跳转到系统设置界面的不同层次做了总结(仅以推送为例):(注:本文ios9系统以ios9.3.1为...
  • denggun12345
  • denggun12345
  • 2016年07月01日 14:46
  • 1497

iOS9 URLScheme白名单

常见URL Scheme LSApplicationQueriesSchemes wechat weixin sinaweibohd sin...
  • Tudouyang
  • Tudouyang
  • 2015年10月15日 17:38
  • 578

IOS回调白名单URL scheme

http://www.jianshu.com/p/a8cce94d508e URL scheme一般使用的场景是应用程序有分享或跳其他平台授权的功能,分享或授权后再跳回来。 近期苹果公司iOS...
  • oLevin
  • oLevin
  • 2016年08月16日 22:38
  • 460

iOS9 的白名单问题

这几天,由于版本更迭,使用xcode 7打包,在处理白名单时,遇到了一些问题。 主要如下,被跳转的App没有添加跳转app的URL scheme至白名单,那么为什么能够回跳。 1、使用Xcode ...
  • ruguoai1989
  • ruguoai1989
  • 2016年02月28日 17:31
  • 1394

iOS开发,使用友盟快速分享与第三方的白名单

官方说的比较详细,但是就是有些重复,而且有很多坑 坑1、集成后,打开app发现一堆问题(如下) **2016-02-02 10:43:48.978 MShow[778:259789] -canOp...
  • helloworld183
  • helloworld183
  • 2016年04月22日 17:40
  • 2483
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发分享之“白名单”
举报原因:
原因补充:

(最多只允许输入30个字)