iOS9 URL Schme 白名單

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

 

WWDC 2015 Session 703: "Privacy and Your App ( 時間在30:18左右)關於 URL scheme 的介紹,指出:git

enter image description here

也就是說:在iOS9中,若是使用 canOpenURL: 方法,該方法所涉及到的 URL scheme 必須在"Info.plist"中將它們列爲白名單,不然不能使用。key叫作LSApplicationQueriesSchemes ,鍵值內容是github

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

  

白名單上限是50個:chrome

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

「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 Appapi

 

iOS9中 openURL: 方法沒有什麼實質性的變化,僅僅多了一個確認動做:微信

enter image description here

蘋果爲何要這麼作?session

在 iOS9 以前,你可使用 canOpenURL: 監測用戶手機裏到底裝沒裝微信,裝沒裝微博。可是也有一些別有用心的 App ,這些 App 有一張經常使用 App 的 URL scheme,而後他們會屢次調用canOpenURL: 遍歷該表,來監測用戶手機都裝了什麼 App ,好比這個用戶裝了叫「大姨媽」的App,你就能夠知道這個用戶是女性,你就能夠只推給這個用戶女性用品的廣告。這是侵犯用戶隱私的行爲。app

這也許就是緣由。iphone

本項目中給出了一個演示用的 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、支付寶四者的白名單,則配置以下:

 <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 文件看起來會是這樣的:

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 應補充

<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>

  

參考連接 。

相關文章
相關標籤/搜索