Ipv6_Only 簡單的理解(已驗證,專案已經上線)

上天眷顧我發表於2016-10-25

網上好多關於ipv6的資料,說半天ipv6是什麼,怎麼建立測試環境,,,可是沒有看到具體的操作和解決的方案,這裡,為大家提供一種方案,希望給大家帶來幫助吧。

總的來說有三個方面需要進行檢查和修改:

1、專案裡面涉及和網路有關的網路請求是否支援ipv6。

2、專案裡面涉及和網路有關的sdk是否支援ipv6。

3、專案的伺服器是否支援ipv6。


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的地址返回給客戶端。如圖所示:



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

本地 Mac 搭建 IPv6 測試環境

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

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

如何判斷自己的專案裡面是否是ipv6、ipv4呢,我們用的方法,就是自己專案裡面涉及和網路有關的進行一一排查

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

我們的app本身支援ipv6是因為我們使用的網路請求是asihttpRequest請求,而asihttpRequest是基於CFNetwork的,蘋果有說明CFNetwork庫是支援IPV6的。而除了自身的網路請求外,我們專案中涉及網路的就是三方庫了,所以歸根到底我們做的只是第三方庫的替換,即:哪些三方庫和網路有關,那麼挨個檢視最新的sdk文件解釋是否描述支援ipv6,如果支援,那就替換。如果沒說支援,那就不換。

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

這種方案需要驗證,估計需要幾天的時間才能知道上線是否被拒。如果僥倖上線了,我會第一時間在本文裡面續寫一下。如果被拒,我也會第一時間排查原因,進行本文的更新。謝謝大家的支援。

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


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

1、Reachability

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



新的sdk包將這個方法幹掉了:reachabilityForLocalWiFi,只要自己的程式碼中幹掉就行了,沒什麼影響。

原因如下介紹:

#pragma mark reachabilityForLocalWiFi

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

//+ (instancetype)reachabilityForLocalWiFi;

2、新浪微博

根據官網提示,這個新的sdk支援了ipv6,所以進行替換。



替換後:

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

3、連連支付

按照連連支付官方文件

最新的sdk包是支援ipv6的,但是舊包也是支援的。專案中用的是2.4.0,官網上最新包是2.4.7,最後我們做了替換。



替換後報錯了:



原因是在新的sdk包裡將報錯的這兩個方法合成了一個。



在新的方法裡面新增了一個判斷支付型別的引數。

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

但是實際上還是遇到了崩潰的bug。然後我們換回了2.4.0版本,應為連連支付官網上說之前的版本也支援ipv6,我們之前的版本沒有問題,所以換了回來,看看上線能成功不。

4、友盟

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



按照需要,勾選瞭如下:

md,搞錯了,專案裡面的友盟是友盟分析,上邊那個是友盟分享。。。



但是根據官方文件,好像我們的不用替換,因為涉及到什麼IDFA,我們專案好像不涉及這個。

5、微信

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



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

比較可笑的是微信的sdk包是支援ipv6的,但是微信本身並不支援ipv6,所以說,即便你替換了最新的sdk包,在ipv6網路下還是不能用微信分享,因為你的app應用在ipv6網路環境下調不起微信,也就分享不了了,這個問題微信應該意識到了,估計後邊的版本應該也是支援ipv6的吧。

6、QQ

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



7、次奧!支付寶sdk支援了ipv6,上午下載的時候沒看見!!!



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

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

8、百度地圖



根據比較,新的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的其實是包括三個方面的:

1、專案裡面涉及和網路有關的網路請求是否支援ipv6。

2、專案裡面涉及和網路有關的sdk是否支援ipv6。

3、專案的伺服器是否支援ipv6。

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


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


得到的結果直接就是一個ipv6格式的,不知道不支援ipv6伺服器的是不是列印出來的是不是ip地址(有待驗證)。如果誰驗證了,希望告知我一聲。在此謝謝了。所以也可以用這個命令列側面驗證伺服器是否支援ipv6。


6月14號23:30提的包,6月16號白天查到上線了。說明一點:這樣處理ipv6的方法是可行的。

最後,哪裡不對的地方可以給我留言,我會及時改進的,謝謝大家。



文/和珏貓(簡書作者)
原文連結:http://www.jianshu.com/p/97b205933c15
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。

相關文章