網上好多關於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下載地址:
總之,對於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