您的位置:首页 > 移动开发 > IOS开发

iOS开发分享之“白名单”

2016-05-30 11:28 405 查看
本文转自:http://www.2cto.com/kf/201602/489546.html

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





也就是说:在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:
 方法没有什么实质性的变化,仅仅多了一个确认动作:





苹果为什么要这么做?

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

这也许就是原因。

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

Demo结构如下:





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

假设有两个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 文件看起来会是这样的:





其他平台可在下面的列表中查询: 各平台OpenURL白名单说明
平台名称URL Schem补充说明
微信wechat,

 
weixin
 
支付宝alipay,

 
alipayshare
 
QQmqqOpensdkSSoLogin,

 
mqqopensdkapiV2,

 
mqqopensdkapiV3,

 
wtloginmqq2,

 
mqq,

 
mqqapi
 
QZONEmqzoneopensdk,

 
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无需配置 
Pocketpocket-oauth-v1 
Pinterestpinit 
Instagraminstagram 
WhatsAppwhatsapp 
Lineline 
KakaoTalkkakaolink 
KaokaoStorystorylink 
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: