閱讀558 返回首頁    go 阿裏雲 go 技術社區[雲棲]


API網關的iOS SDK已經支持 IPV6

5月初Apple明文規定所有開發者在6月1號以後提交新版本需要支持IPV6-Only的網絡,有些用戶在這塊就踩到坑了,多次被拒。下麵我們就Apple在這塊的規定分下下,我們的App如何才能避免在這個問題上吃Apple的閉門羹。

IPV6-Only支持解釋

IPV6是對IPV4地址空間的擴充。目前我們用iOS設備連上網絡時,設備被分配的地址均是IPV4地址,但是隨著運營商和企業逐漸部署IPV6 DNS64/NAT64網絡之後,設備被分配的地址會變成IPV6的地址,而這些網絡就是所謂的IPV6-Only網絡。**重點是,目前iOS設備仍然可以通過此網絡去獲取IPV4地址提供的內容。**客戶端向服務器端請求域名解析,首先通過DNS64 Server查詢IPv6的地址,如果查詢不到,再向DNS Server查詢IPv4地址,通過DNS64 Server合成一個IPV6的地址,最終將一個IPV6的地址返回給客戶端。如圖所示:

a93c28d36fc900887d0166b63aa08dc2

在Mac OS 10.11+的雙網卡的Mac機器(以太網口+無線網卡),我們可以通過模擬構建這麼一個local IPv6 DNS64/NAT64 的網絡環境去測試應用是否支持IPV6-Only網絡,大概原理如下:

c6d5ddc3d13bd5845245b380a8730447

具體的搭建方法請參考:

https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html

Apple如何審核支持IPV6-Only

Apple說的支持IPV6-Only網絡,其實就是說讓應用在 IPv6 DNS64/NAT64 網絡環境下仍然能夠正常運行。我們目前的實際網絡環境仍然是IPV4網絡,應用需要能夠同時保證IPV4和IPV6環境下的可用性。

Apple官方聲明iOS9開始向IPV6支持過渡,在iOS9.2+支持通過getaddrInfo方法將IPV4地址合成IPV6地址(The ability to synthesize IPv6 addresses was added to getaddrinfo in iOS 9.2 and OS X 10.11.2)。蘋果的審核部門表示,隻需要應用在蘋果最新的係統上保證IPV6的兼容性即可。

如果應用一直直接使用IPV4地址通過NSURLConenction或者NSURLSession進行網絡請求(一般需要服務器允許,且客戶端需要在header中偽裝host);經測試,IPV6網絡環境下,直接使用IPV4地址在iOS9及以上的係統仍然能夠正常訪問;在iOS8.4及以下不能正常訪問;這一點蘋果的解釋和建議是這樣的:

Note: In iOS 9 and OS X 10.11 and later, NSURLSession and CFNetwork automatically synthesize IPv6 addresses from IPv4 literals locally on devices operating on DNS64/NAT64 networks. However, you should still work to rid your code of IP address literals.

應用如何支持IPV6-Only?

對於如何支持IPV6-Only,官方給出了如下幾點標準:

1.Use High-Level Networking Frameworks;
2.Don’t Use IP Address Literals;
3.Check Source Code for IPv6 DNS64/NAT64 Incompatibilities;
4.Use System APIs to Synthesize IPv6 Addresses;

官方對 High-Level Networking Frameworks有以下解釋:
using high-level networking APIs such as NSURLSession and the CFNetwork frameworks and you connect by name, you should not need to change anything for your app to work with IPv6 addresses

可以明確的是NSURLSession和CFNetwork是支持IPV6的, 經過測試,NSURLConnection在最新的iOS9係統上是支持IPV6的。

結論:

API網關的SDK使用的是蘋果提供的High-Level Networking Frameworks:NSURLSession進行的網絡訪問,並且使用的都是域名方式訪問,完全支持IPV6-Only的網絡環境,可以放心使用。

如果你的App隻使用了API網關的SDK進行網絡訪問,那麼你的App上架申請時不會因為不支持IPV6-Only的網絡環境而被拒絕。如果因為IPV6 ONLY問題被拒絕,請查找自己的其他代碼,看看是否有其他的網絡訪問代碼。

如果你的App還訪問了其他網絡,請在網絡訪問時確認以下兩點:

  1. 使用High-Level Networking Frameworks(NSURLSession,CFNetwork frameworks)來訪問網絡,並且使用域名,不要使用IP。
  2. 如果必須使用ip來訪問網絡,對IP進行IPV6的處理後使用。

最後更新:2017-05-15 14:30:59

  上一篇:go  這些智能醫療產品,使糖尿病輕鬆管理
  下一篇:go  WannaCry 2.0勒索病毒變種是什麼?怎麼防?