你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS9 URL Schme 白名單

iOS9 URL Schme 白名單

編輯:IOS開發綜合

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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved