正確適配蘋果ATS審核要求的姿勢

長期以來流傳一則消息,蘋果將于17年1月1日收緊ATS政策,強制接口使用HTTPS協(xié)議,據(jù)說是一位參加WWDC2016開發(fā)者大會的開發(fā)者在Twitter上發(fā)推文公布了這一消息。

8C698265-695C-4AE4-A267-8ECE4ABFC674.png

但是蘋果真的這么激進嗎?蘋果開發(fā)者論壇里一名官方人員近日對此進行了澄清:

FF19D433-D405-4FB7-ACD5-3886923AA26B.png

首先,ATS的技術(shù)行為不會有任何變化(除了新增兩個字段NSAllowsArbitraryLoadsInWebContent和NSRequiresCertificateTransparency,也就是更細分權(quán)限)。從技術(shù)角度來看,ATS在iOS10中和iOS9中的表現(xiàn)完全一致。
那么到底是什么變化了呢?我們會收緊審核政策,即對于開發(fā)者添加的ATS例外(即HTTP接口),要求提供一個“合理的解釋”。之所以要增加這么一個“麻煩”,是為了避免開發(fā)者們都無腦地全局關(guān)閉ATS,使得ATS偏離其初衷,形同虛設(shè)。開發(fā)者將無法再無腦地全局關(guān)閉ATS,并且添加例外時需要提供合理的解釋。
如此看來,蘋果是想以這樣的形式教育和促進HTTPS的普及,但也沒有激進到一刀切的地步。一句話總結(jié):你仍然可以在2017年之后使用HTTP?接口,但需要在ATS中添加例外,同時審核時多少說兩句理由。更重要的是,你要知道這個政策會越來越緊。
躲得過初一,躲不過十五。早點開始考慮向HTTPS遷移吧!

針對 Info.plist

iOS 10 在之前版本中,app都在 Info.plist 中添加 NSAppTransportSecurity
字典并且將 NSAllowsArbitraryLoads
設(shè)置為YES來禁用 ATS。iOS 10中又添加了 NSAllowsArbitraryLoadsInWebContent 字典,這會對遷移方案產(chǎn)生什么影響呢?根據(jù)蘋果要求,app 已經(jīng)不能再使用之前的方式來禁用 ATS,也就意味著 NSAllowsArbitraryLoads 只能設(shè)置為 NO,否則就需要在審核時說明 app 不支持ATS的原因。
業(yè)內(nèi)大神王巍已經(jīng)總結(jié)了一幅非常直觀的ATS對HTTP影響圖表,如下:
1、NSAllowsArbitraryLoads 設(shè)置為 YES 似乎可以解決問題,但這不符合蘋果ATS要求。


Paste_Image.png

2、NSAllowsArbitraryLoads 設(shè)置為 NO,NSAllowsArbitraryLoadsInWebContent 設(shè)置為 YES,HTTP只有在iOS 10下的 WKWebview可用。

E1AA34EA-640E-4F79-8BEF-7990BA8777C0.png

3、NSAllowsArbitraryLoads ,NSAllowsArbitraryLoadsInWebContent 都設(shè)置為 NO,HTTP全部不可用。

8C850327-049F-4004-BF9A-4CC9529AA242.png

4、NSAllowsArbitraryLoads 設(shè)置為 YES,NSAllowsArbitraryLoadsInWebContent 設(shè)置為 NO,HTTP只支持iOS 9但不符合ATS要求,而且iOS 10下的 WKWebview也不可用。

1FDB664B-FC60-47C1-888C-92F9E6D21700.png

5、NSAllowsArbitraryLoads ,NSAllowsArbitraryLoadsInWebContent 都設(shè)置為 YES,HTTP只有 WKWebView 支持。

9DBACE6B-7E3B-467F-B09B-E62E1785A0A3.png

綜合蘋果要求,與實際產(chǎn)品業(yè)務(wù)需求,選擇使用 NSAllowsArbitraryLoads 設(shè)置為 NO (避免審核風險),NSAllowsArbitraryLoadsInWebContent 設(shè)置為 YES(允許鏈接HTTP),設(shè)置HTTP域名訪問白名單,使用WKWebView作為Web容器的技術(shù)方案。

針對NSURLSession API

只需將網(wǎng)絡(luò)庫更新至最新版的AFNetworking,即可完美支持HTTP、HTTPS的API請求。

41EB44A0-4BB0-4614-B56C-D5C5453D9304.png

針對Web容器

使用 WKWebView 替換 UIWebView,業(yè)務(wù)對接采用Web與Native交互協(xié)議來解決兼容問題。iOS 10 中 WKWebView 完美支持HTTP、HTTPS的鏈接瀏覽(包括在線視頻播放)。

887917D7-858D-4004-B495-6E7FDE2873B1.png

針對網(wǎng)絡(luò)圖片下載庫SDWebImage

測試環(huán)境下將會使用自簽名的SLL證書,需要修改一些代碼才能支持,生產(chǎn)環(huán)境下使用商業(yè)簽名證書無需做修改。

9DF0B1D0-4C03-4BC5-B6BB-61456DDC58D4.png

針對第三方HTTP鏈接

可以設(shè)置 NSExceptionDomains 屬性來將需要排除強制驗證的域名寫進來。 也就是說我如果我們的 app 只訪問我們自己的服務(wù)器, 我們可以將我們服務(wù)器的域名添加進來,依然可以繼續(xù)使用 HTTP。但我們不能像之前那樣簡單粗暴的直接把所有的請求都通過。NSExceptionDomains 的設(shè)置方法如下, 比如我們要將 campus.chinahr.com 這個域名排除在 ATS 驗證之外,就可以這樣:

WechatIMG36.jpeg

不過蘋果建議如果要提供瀏覽器類的服務(wù),請使用SFSafariViewController(UI不可定制),優(yōu)于WKWebView,后者更適用于對用戶訪問web內(nèi)容更有把控的情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容