現在 (2016-11-28),這方面的相關規定和幾個事實如下:
相比於使用nsallowsarbitraryloads
將全部 http 內容開放,選擇使用n***ceptiondomains
來針對特定的網域名稱,通過設定該網域名稱下的n***ceptionallowsinsecurehttploads
來開放 http 應該要相對容易過審核。「需要訪問的網域名稱是第三方伺服器,他們沒有進行 https 對應」會是審核時的乙個可選理由,但是這應該只需要針對特定網域名稱,而非全面開放。如果訪問的是自己的伺服器的話,可能這個理由會無法通過。
總結一下就是以下兩點:
對於 api 請求,基本上是必須使用 https 的,特別是如果你們自己可以管理伺服器的話。可能需要後端的同學盡快公升級到 https (不過話說雖然是用 let's encrypt 的,我乙個個人部落格都啟用 https 了,作為 api 的使用者伺服器,還不開 https 真有點說不過去)。如果使用的是第三方的 api,而他們沒有提供 https 支援的話,需要在n***ceptiondomains
中進行新增。
如果你需要使用內網,可以設定nsallowslocalnetworking
,而不必擔心 ssl 連線的問題。
ats 設定
使用的元件
備註nsallowsarbitraryloads: no
webview❌❌
預設行為
urlsession❌❌
nsallowsarbitraryloads: yes
webview✅✅
徹底禁用 ats
urlsession✅✅
審核時需要說明理由
nsallowsarbitraryloads: no & nsallowsarbitraryloadsinwebcontent: yes
webview❌✅
只對網頁內容禁用 ats
urlsession❌❌
保證 api 的安全性
nsallowsarbitraryloads: no & nsallowsarbitraryloadsinwebcontent: no
webview❌❌
urlsession❌❌
nsallowsarbitraryloads: yes & nsallowsarbitraryloadsinwebcontent: no
webview✅❌
對於 ios 10,nsallowsarbitraryloadsinwebcontent 存在時忽略 nsallowsarbitraryloads 的設定
urlsession✅❌
ios 9 將繼續使用 nsallowsarbitraryloads
nsallowsarbitraryloads: yes & nsallowsarbitraryloadsinwebcontent: yes
webview✅✅
對於 ios 10,nsallowsarbitraryloadsinwebcontent 存在時忽略 nsallowsarbitraryloads 的設定
urlsession✅❌
ios 9 將繼續使用 nsallowsarbitraryloads
nsallowsarbitraryloads : boolean
nsallowsarbitraryloadsformedia : boolean
nsallowsarbitraryloadsinwebcontent : boolean
nsallowslocalnetworking : boolean
n***ceptiondomains : dictionary }}
關於 iOS 10 中 ATS 的問題
相比於使用nsallowsarbitraryloads將全部 http 內容開放,選擇使用n ceptiondomains來針對特定的網域名稱開放 http 應該要相對容易過審核。需要訪問的網域名稱是第三方伺服器,他們沒有進行 https 對應 會是審核時的乙個可選理由,但是這應該只需要針對特定網域...
關於 iOS 10 中 ATS 的問題
相比於使用nsallowsarbitraryloads將全部 http 內容開放,選擇使用n ceptiondomains來針對特定的網域名稱開放 http 應該要相對容易過審核。需要訪問的網域名稱是第三方伺服器,他們沒有進行 https 對應 會是審核時的乙個可選理由,但是這應該只需要針對特定網域...
關於 iOS 10 中 ATS 的問題
相比於使用nsallowsarbitraryloads將全部 http 內容開放,選擇使用n ceptiondomains來針對特定的網域名稱開放 http 應該要相對容易過審核。需要訪問的網域名稱是第三方伺服器,他們沒有進行 https 對應 會是審核時的乙個可選理由,但是這應該只需要針對特定網域...