最近在處理德國用戶必須關閉蜂窩移動數據才可以連接我們公司的自帶WiFi功能的設備,這個問題讓人頭疼的地方在于只有德國才有這個問題,在國內無論如何都無法復現,而公司又無法安排我們去德國出差解決;所以我只能用各種想到的方式進行設置,然后讓德國客戶進行測試;
iOS9讓所有的HTTP默認使用了HTTPS,原來的HTTP協議傳輸都改成TLS1.2協議進行傳輸。直接造成的情況就是App發(fā)請求的時候彈出網絡無法連接。解決辦法就是在項目的info.plist 文件里加上如下節(jié)點:

NSAppTransportSecurity - NSAllowsArbitraryLoads
這個子節(jié)點的意思是:是否允許任性的加載?! 設為YES的話就將禁用了AppTransportSecurity轉而使用用戶自定義的設置,這個問題就解決了。
在嘗試NSAllowsArbitraryLoads設置為NO后,在一個新的沒有卡的手機上進行測試;然而卻無論如何都無法正常建立socket;通過查看打印發(fā)現,在socket的回調中,一直在打印錯誤信息“Disonnect FAIL reason:No route to host”;
當時有點懷疑為何會這樣;IP和端口都對的話,按理說應該是能正常建立socket連接的才對;最后,我突然想起了之前適配iOS 10 時遇到的一個問題,在國行的iPhone手機上第一次安裝某個APP并打開時,如果該手機聯網的話,默認會彈出一個是否允許app使用數據?的彈出框;在點擊允許前是無法建立任何網絡請求的;
在點擊允許前,在設置頁面,對應APP的信息中只包含當前允許的權限,如地理位置;在允許后,此處也會顯示網絡數據的權限設置;

你還可以從「設置 - 蜂窩移動網絡 - 使用無線局域網與蜂窩移動的應用」中,對所有你允許過聯網的 App 進行統(tǒng)一管理。在該設置列表內,你不僅可以分別查看每個 App 消耗了多少流量,還能對 App 的聯網權限進行三種選項管理:關閉聯網、僅無線局域網、無線局域網與蜂窩移動數據。
所以瞬間我就明白原因了,當前手機沒有手機卡,而且連接的WiFi是無法聯網的,所以該手機是完全沒有網絡的,因此在打開該應用后,并沒有彈出是否允許app使用數據?的彈出框;在給手機插上卡后,再次打開時,就有了提示,點擊允許后,終于可以正常使用;
本文作為個人總結記錄,如有問題歡迎指正;
參考文章:
iOS 10 的坑:新機首次安裝 app,請求網絡權限“是否允許使用數據
”http://m.itdecent.cn/p/6cbde1b8b922
http://m.itdecent.cn/p/a2af8e3dcaa3
iOS 10 在進行 Socket 通訊產生的坑...http://m.itdecent.cn/p/576a3f89320c
具透 | 你可能不知道,iOS 10 有一個中國「特供」的聯網權限功能https://sspai.com/post/35720