iOS9 URL Schme 白名单

原文地址: https://github.com/ChenYilong/iOS9AdaptationTips

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

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

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array>

  

白名单上限是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、支付宝四者的白名单,则配置如下:

 <key>LSApplicationQueriesSchemes</key>
<array>
    <!-- 微信 URL Scheme 白名单-->
    <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>

    <!-- 支付宝  URL Scheme 白名单-->
    <string>alipay</string>
    <string>alipayshare</string>

</array>

  

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

其他平台可在下面的列表中查询: 各平台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 应补充

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fbapi20130214</string>
    <string>fbapi20130410</string>
    <string>fbapi20130702</string>
    <string>fbapi20131010</string>
    <string>fbapi20131219</string>
    <string>fbapi20140410</string>
    <string>fbapi20140116</string>
    <string>fbapi20150313</string>
    <string>fbapi20150629</string>
    <string>fbauth</string>
    <string>fbauth2</string>
    <string>fb-messenger-api20140430</string>
</array>

  

如果使用 FBSDKMessengerShareKit,还要加上

<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>

  

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

<key>LSApplicationQueriesSchemes</key>
<array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
</array>

  

参考链接 。

时间: 2024-10-12 12:17:08

iOS9 URL Schme 白名单的相关文章

iOS9适配 之 关于info.plist 第三方登录 添加URL Schemes白名单

近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装. 受此影响,当你的应用在iOS 9中需要使用 QQ/QQ空间/支付宝/微信SDK 的相关能力(分享.收藏.支付.登录等)时,需要在“Info.plist”里增加如下代码: <key>LSApplicationQueriesSchemes</key> <array> <!-- 微信 URL S

iOS白名单设置

在做分享.支付的时候需要跳转到对应的app,这里有需要设置的白名单列表<key>LSApplicationQueriesSchemes</key> <array> <!-- 微信 URL Scheme 白名单--> <string>wechat</string> <string>weixin</string> <!-- 新浪微博 URL Scheme 白名单--> <string>sin

Confluence 6 配置白名单

Confluence 管理员可以通过添加 URLs 到白名单选择出入的链接和使用 RSS 宏,HTML 包含宏和小工具中的内容. 如果一个内容被添加到 Confluence 系统中,但是这个 URLs 不在允许的链接列表中的话,系统将会显示一个错误信息,并提示用户将这个 URL 添加到白名单中. Application links将会自动添加到白名单中.你不需要为这些链接手动进行添加. 注意: HTML Include macro 在默认的情况下是禁用的. 在白名单中允许的 URL 添加 URL

Confluence 6 白名单表达式类型

表达式类型 当添加一个 URL 到白名单列表中的时候,你可以选择采取下面的表达式进行添加. 域名名称(Domain name) 允许 URL 为一个指定的域名. http://www.example.com 精确匹配(Exact match) 允许一个特定的 URL. http://www.example.com/thispage 通配符表达式(Wildcard Expression) 允许所有匹配的 URLs.通配符 * 被用来替代一个或者多个字符. http://*example.com 正

项目适配iOS9遇到的一些问题及解决办法 ,以及URL 白名单配置方法

1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. 原因:iOS9引入了新特性App Transport Security (ATS).详情:App Transport Security (ATS)新特性要求App内访问的网络必须使用HTTPS协议

IOS 应用跳转 (IOS9白名单)

跳转到指定app的实现 IOS中应用的跳转是通过URL实现的,因此在实现应用跳转之前我们要设置一下对应的URL. 图一(寻找配置软件的URL) 图二(具体配置选项) 注意: 如果IOS版本为IOS9 我们需要为app设置白名单. 实现跳转的前提是有这个app,因此我们需要把被跳转的app先运行,即安装到模拟器中. 如图三(在info中添加) 效果图四 代码: // // ViewController.m // X // // Created by ma c on 16/4/9. // Copyr

适配iOS9遇到的一些问题_Scheme白名单_ Bitcode及解决办法

升级Xcode7 运行项目发现报错如下: 1.Scheme白名单问题 -canOpenURL: failed for URL: "weixin://app/wxdaae92a9cfe5d54c/" - error: "This app is not allowed to query for scheme weixin" 搜索后得知 近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在"Info.plist"中将要使用的UR

iOS9中如何适配http,Bitcode,设置sina,qq,weChat配置Scheme白名单

iOS9.0SDK在编译的时候,默认所有从NSURLConnection.CFURL和NSURLSession发出的http请求,都改为https请求.由于AFNetworking版本底层是用了NSURLConnection,所以使用AFNetworking的app都将受到影响.对于这个问题的解决办法有三种,一:让服务器更新,使用https,以解析相关的数据. 二:在info.plist做些配置,让其暂时倒回到不安全的网络传输协议(http协议).下面详细来说下这两种方案. 方案一:让服务器更新

apache rewrite规则白名单示例

如何在apache中使用rewrite规则配置白名单,这里分享一个方法. 今天弄了半天apache 的rewrite 规则,还是没有配置出符合的规则.经同事指点,成功. 需求:六个文件的入口,其他都重定向到index自己的思路:正则找出不是六个文件的URL的模式,进行过滤.对比同事的结果,自己思路的问题:1. 想找出所有不符合规则的,越想越多,无法下手.---------------- 思路错误,应该 制定白名单,2. 概念错误, 弄错 REQUEST_URI 和 REQUEST_STRING