關於IPv6

  App在本地IPv6的測試環境下運行一切正常,結果又是被拒,悲劇緣由仍是IPv6的問題;
求解決方法
被拒緣由
We discovered one or more bugs in your app when reviewed on iPhone running iOS 10.1.1 on Wi-Fi connected to an IPv6 network.

Specifically, we received a network error message when we used the demo account to log in.

Next Steps

Please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify the issue(s), then revise and resubmit your app for review.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue(s). For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue(s).

Resources

For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking
  

  網上好多關於ipv6的資料,說半天ipv6是什麼,怎麼創建測試環境,,,但是沒有看到具體的操做和解決的方案,這裏,爲你們提供一種方案,但願給你們帶來幫助吧。php

總的來講有三個方面須要進行檢查和修改:html

  一、項目裏面涉及和網絡有關的網絡請求是否支持ipv6。ios

  二、項目裏面涉及和網絡有關的sdk是否支持ipv6。git

  三、項目的服務器是否支持ipv6。github

 

IPv6的簡介服務器

  IPv4 和 IPv6的區別就是 IP 地址前者是 .(dot)分割,後者是以 :(冒號)分割的(更多詳細信息自行搜索)。微信

PS:在使用 IPv6 的熱點時候,記得手機開飛行模式哦,保證手機只在 Wi-Fi 下上網,以避免手機在鏈接不到網絡時候,會默認跳轉到使用 蜂窩移動網絡(即2G、3G、4G流量) 上網。網絡

  IPV6,是對IPV4地址空間的擴充。目前當咱們用iOS設備鏈接上Wifi、4G、3G等網絡時,設備被分配的地址均是IPV4地址,可是隨着運營商和企業逐漸部署IPV6 DNS64/NAT64網絡以後,設備被分配的地址會變成IPV6的地址,而這些網絡就是所謂的IPV6-Only網絡,而且仍然能夠經過此網絡去獲取IPV4地址提供的內容。客戶端向服務器端請求域名解析,首先經過DNS64 Server查詢IPv6的地址,若是查詢不到,再向DNS Server查詢IPv4地址,經過DNS64 Server合成一個IPV6的地址,最終將一個IPV6的地址返回給客戶端。如圖所示:app

  網上對於蘋果官網上ipv6的文章翻譯不少,附上連接,這篇介紹的不錯:iOS應用支持IPV6,就那點事兒ide

本地 Mac 搭建 IPv6 測試環境

附上連接:本地如何搭建IPv6環境測試你的APP

上邊這些幾乎沒什麼用,網上一搜有不少。。。

  如何判斷本身的項目裏面是不是ipv六、ipv4呢,咱們用的方法,就是本身項目裏面涉及和網絡有關的進行一一排查

文章最後會提到ipv6解決的方案除了上述兩點還有一個關於服務器的緣由。

  咱們的app自己支持ipv6是由於咱們使用的網絡請求是asihttpRequest請求,而asihttpRequest是基於CFNetwork的,蘋果有說明CFNetwork庫是支持IPV6的。而除了自身的網絡請求外,咱們項目中涉及網絡的就是三方庫了,因此歸根到底咱們作的只是第三方庫的替換,即:哪些三方庫和網絡有關,那麼挨個查看最新的sdk文檔解釋是否描述支持ipv6,若是支持,那就替換。若是沒說支持,那就不換。

(固然,還能夠用cocoadpods替換三方庫,關於cocoadpods的學習能夠參考本人這篇文章Cocoapods安裝

  這種方案須要驗證,估計須要幾天的時間才能知道上線是否被拒。若是僥倖上線了,我會第一時間在本文裏面續寫一下。若是被拒,我也會第一時間排查緣由,進行本文的更新。謝謝你們的支持。

已經上線了,該方案可行。

 

那麼咱們替換了哪些三方庫呢,下邊一一列舉。(文章下部會有各個三方庫的連接)

一、Reachability

按照蘋果開發者中心提示,這個必須換。

  新的sdk包將這個方法幹掉了:reachabilityForLocalWiFi,只要本身的代碼中幹掉就好了,沒什麼影響。

緣由以下介紹:

#pragma mark reachabilityForLocalWiFi

//reachabilityForLocalWiFi has been removed from the sample.  See ReadMe.md for more information.

//+ (instancetype)reachabilityForLocalWiFi;

二、新浪微博

根據官網提示,這個新的sdk支持了ipv6,因此進行替換。

替換後:

  根據比較,新舊sdk只有上述變化,替換後command+B編譯無錯誤提示。應該沒事。

三、連連支付

按照連連支付官方文檔

最新的sdk包是支持ipv6的,可是舊包也是支持的。項目中用的是2.4.0,官網上最新包是2.4.7,最後咱們作了替換。

替換後報錯了:

緣由是在新的sdk包裏將報錯的這兩個方法合成了一個。

  在新的方法裏面添加了一個判斷支付類型的參數。

  根據項目中報錯的兩個地方,第一個是快捷支付,第二個是認證支付。按照以前的進行了修改。command+B編譯無錯誤提示。應該沒事。

  可是實際上仍是遇到了崩潰的bug。而後咱們換回了2.4.0版本,應爲連連支付官網上說以前的版本也支持ipv6,咱們以前的版本沒有問題,因此換了回來,看看上線能成功不。

四、友盟

  按照友盟官方sdk文檔描述,須要更換新的sdk包。

按照須要,勾選了以下:

  OMG,搞錯了,項目裏面的友盟是友盟分析,上邊那個是友盟分享。。。

  可是根據官方文檔,好像咱們的不用替換,由於涉及到什麼IDFA,咱們項目好像不涉及這個。

五、微信

  按照微信最新sdk包1.7版本里面的README.txt,最新的sdk包支持ipv6

  而咱們項目中的微信是1.5版本的。應該進行替換。command+B編譯無錯誤提示。應該沒事。

  比較好笑的是微信的sdk包是支持ipv6的,可是微信自己並不支持ipv6,因此說,即使你替換了最新的sdk包,在ipv6網絡下仍是不能用微信分享,由於你的app應用在ipv6網絡環境下調不起微信,也就分享不了了,這個問題微信應該意識到了,估計後邊的版本應該也是支持ipv6的吧。

六、QQ

官方文檔好像也沒有說ipv6的事啊

七、支付寶sdk支持了ipv6!!!

  但是下載的時候老是打不開.zip的壓縮包。。。叫別人幫忙下載了一份

  command+B編譯無錯誤提示。應該沒事。

八、百度地圖

根據比較,新的sdk包沒有了bundle文件。須要將舊包的bundle文件拷貝進來。

各個sdk下載地址:

reachability

新浪微博

連連支付

友盟統計分析

微信

QQ

支付寶

百度地圖

  總之,對於ipv6_Only的處理就是這樣辦的,從兩大方面進行本身審覈:自身網絡請求和三方涉及網絡請求。

關於AFNetworking是否支持ipv-6,有網友如是說:

可見,AFNetworking是支持ipv-6的。可是,關於支持ipv6的afn版本有以下說明:

  另外有網友遇到這樣一個問題:這裏還遇到一個坑,內網的訪問下是不可能鏈接到本身的服務器,後面測試一下公網阿里雲的服務器,可以正常鏈接,這個多是DNS64在搜索ipv6的過程當中,並無搜索內網的網絡,致使內網鏈接失敗(這裏卡了半天, 切記)(這個問題筆者並無遇到,也沒有親測,你們注意一下這個問題,若是遇到了,知道是怎麼回事。)

  最後,有的網友上線被拒了,多是由於app的服務器端沒有支持ipv6,就此問題,我諮詢了咱們的技術經理,技術經理說「後臺(即服務器)是要作ipv6的支持工做的」。可是具體是誰管,具體怎麼操做的我就不得而知了,這裏你們注意一下吧:不只僅是客戶端這邊支持ipv6,上線以前最好問一下後臺端是否是作了相應的ipv6的支持。

  這裏關於本身的服務器是否支持ipv6,有網友提供了一個方法,你們能夠試一下。(謝謝杭州-托兒索被拒6次的ipv6,爭得托兒索的贊成,進行轉發)

前兩條說的就是咱們的方案:項目裏面涉及和網絡有關的進行一一排查

第三條是在本身電腦上判斷是否服務器支持ipv6的。親測,在終端獲得下圖:

  按照托兒索的說法,上圖的位置那裏顯示NOERROR說明服務器沒有問題,也是支持ipv6的。若是有錯的話,能夠按照下邊提供的表格進行對照。

  再看託兒所的結論,咱們會獲得下邊的結論,涉及支持ipv6的實際上是包括三個方面的:

一、項目裏面涉及和網絡有關的網絡請求是否支持ipv6。

二、項目裏面涉及和網絡有關的sdk是否支持ipv6。

三、項目的服務器是否支持ipv6。

最後,說一下關於托兒索的命令行:終端  dig +nocmd + nostats 你的域名 AAAA,我在網上查了一下發現有這麼個命令行:

爲了方便複製:digwww.isc.orgAAAA +short 

  獲得的結果直接就是一個ipv6格式的,不知道不支持ipv6服務器的是否是打印出來的是否是ip地址(有待驗證)。若是誰驗證了,但願告知我一聲。在此謝謝了。因此也能夠用這個命令行側面驗證服務器是否支持ipv6。

 

參考文章:

http://www.jianshu.com/p/97b205933c15

相關文章
相關標籤/搜索