关于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
網(wǎng)上好多關(guān)于ipv6的資料,說(shuō)半天ipv6是什么,怎么建立測(cè)試環(huán)境,,,可是沒(méi)有看到具體的操作和解決的方案,這里,為大家提供一種方案,希望給大家?guī)?lái)幫助吧。
總的來(lái)說(shuō)有三個(gè)方面需要進(jìn)行檢查和修改:
1、項(xiàng)目里面涉及和網(wǎng)絡(luò)有關(guān)的網(wǎng)絡(luò)請(qǐng)求是否支持ipv6。
2、項(xiàng)目里面涉及和網(wǎng)絡(luò)有關(guān)的sdk是否支持ipv6。
3、項(xiàng)目的服務(wù)器是否支持ipv6。
?
IPv6的簡(jiǎn)介
IPv4 和 IPv6的區(qū)別就是 IP 地址前者是 .(dot)分割,后者是以 :(冒號(hào))分割的(更多詳細(xì)信息自行搜索)。
PS:在使用 IPv6 的熱點(diǎn)時(shí)候,記得手機(jī)開(kāi)飛行模式哦,保證手機(jī)只在 Wi-Fi 下上網(wǎng),以免手機(jī)在連接不到網(wǎng)絡(luò)時(shí)候,會(huì)默認(rèn)跳轉(zhuǎn)到使用 蜂窩移動(dòng)網(wǎng)絡(luò)(即2G、3G、4G流量) 上網(wǎng)。
IPV6,是對(duì)IPV4地址空間的擴(kuò)充。目前當(dāng)我們用iOS設(shè)備連接上Wifi、4G、3G等網(wǎng)絡(luò)時(shí),設(shè)備被分配的地址均是IPV4地址,但是隨著運(yùn)營(yíng)商和企業(yè)逐漸部署IPV6 DNS64/NAT64網(wǎng)絡(luò)之后,設(shè)備被分配的地址會(huì)變成IPV6的地址,而這些網(wǎng)絡(luò)就是所謂的IPV6-Only網(wǎng)絡(luò),并且仍然可以通過(guò)此網(wǎng)絡(luò)去獲取IPV4地址提供的內(nèi)容。客戶端向服務(wù)器端請(qǐng)求域名解析,首先通過(guò)DNS64 Server查詢IPv6的地址,如果查詢不到,再向DNS Server查詢IPv4地址,通過(guò)DNS64 Server合成一個(gè)IPV6的地址,最終將一個(gè)IPV6的地址返回給客戶端。如圖所示:
網(wǎng)上對(duì)于蘋(píng)果官網(wǎng)上ipv6的文章翻譯很多,附上鏈接,這篇介紹的不錯(cuò):iOS應(yīng)用支持IPV6,就那點(diǎn)事兒
本地 Mac 搭建 IPv6 測(cè)試環(huán)境
附上鏈接:本地如何搭建IPv6環(huán)境測(cè)試你的APP
(上邊這些幾乎沒(méi)什么用,網(wǎng)上一搜有很多。。。)
如何判斷自己的項(xiàng)目里面是否是ipv6、ipv4呢,我們用的方法,就是自己項(xiàng)目里面涉及和網(wǎng)絡(luò)有關(guān)的進(jìn)行一一排查。
(文章最后會(huì)提到ipv6解決的方案除了上述兩點(diǎn)還有一個(gè)關(guān)于服務(wù)器的原因。)
我們的app本身支持ipv6是因?yàn)槲覀兪褂玫木W(wǎng)絡(luò)請(qǐng)求是asihttpRequest請(qǐng)求,而asihttpRequest是基于CFNetwork的,蘋(píng)果有說(shuō)明CFNetwork庫(kù)是支持IPV6的。而除了自身的網(wǎng)絡(luò)請(qǐng)求外,我們項(xiàng)目中涉及網(wǎng)絡(luò)的就是三方庫(kù)了,所以歸根到底我們做的只是第三方庫(kù)的替換,即:哪些三方庫(kù)和網(wǎng)絡(luò)有關(guān),那么挨個(gè)查看最新的sdk文檔解釋是否描述支持ipv6,如果支持,那就替換。如果沒(méi)說(shuō)支持,那就不換。
(當(dāng)然,還可以用cocoadpods替換三方庫(kù),關(guān)于cocoadpods的學(xué)習(xí)可以參考本人這篇文章Cocoapods安裝)
這種方案需要驗(yàn)證,估計(jì)需要幾天的時(shí)間才能知道上線是否被拒。如果僥幸上線了,我會(huì)第一時(shí)間在本文里面續(xù)寫(xiě)一下。如果被拒,我也會(huì)第一時(shí)間排查原因,進(jìn)行本文的更新。謝謝大家的支持。
已經(jīng)上線了,該方案可行。
?
那么我們替換了哪些三方庫(kù)呢,下邊一一列舉。(文章下部會(huì)有各個(gè)三方庫(kù)的鏈接)
1、Reachability
按照蘋(píng)果開(kāi)發(fā)者中心提示,這個(gè)必須換。
新的sdk包將這個(gè)方法干掉了:reachabilityForLocalWiFi,只要自己的代碼中干掉就行了,沒(méi)什么影響。
原因如下介紹:
#pragma mark reachabilityForLocalWiFi//reachabilityForLocalWiFi has been removed from the sample. See ReadMe.md for more information.//+ (instancetype)reachabilityForLocalWiFi;2、新浪微博
根據(jù)官網(wǎng)提示,這個(gè)新的sdk支持了ipv6,所以進(jìn)行替換。
替換后:
根據(jù)比較,新舊sdk只有上述變化,替換后command+B編譯無(wú)錯(cuò)誤提示。應(yīng)該沒(méi)事。
3、連連支付
按照連連支付官方文檔
最新的sdk包是支持ipv6的,但是舊包也是支持的。項(xiàng)目中用的是2.4.0,官網(wǎng)上最新包是2.4.7,最后我們做了替換。
替換后報(bào)錯(cuò)了:
原因是在新的sdk包里將報(bào)錯(cuò)的這兩個(gè)方法合成了一個(gè)。
在新的方法里面添加了一個(gè)判斷支付類型的參數(shù)。
根據(jù)項(xiàng)目中報(bào)錯(cuò)的兩個(gè)地方,第一個(gè)是快捷支付,第二個(gè)是認(rèn)證支付。按照之前的進(jìn)行了修改。command+B編譯無(wú)錯(cuò)誤提示。應(yīng)該沒(méi)事。
但是實(shí)際上還是遇到了崩潰的bug。然后我們換回了2.4.0版本,應(yīng)為連連支付官網(wǎng)上說(shuō)之前的版本也支持ipv6,我們之前的版本沒(méi)有問(wèn)題,所以換了回來(lái),看看上線能成功不。
4、友盟
按照友盟官方sdk文檔描述,需要更換新的sdk包。
按照需要,勾選了如下:
OMG,搞錯(cuò)了,項(xiàng)目里面的友盟是友盟分析,上邊那個(gè)是友盟分享。。。
但是根據(jù)官方文檔,好像我們的不用替換,因?yàn)樯婕暗绞裁碔DFA,我們項(xiàng)目好像不涉及這個(gè)。
5、微信
按照微信最新sdk包1.7版本里面的README.txt,最新的sdk包支持ipv6
而我們項(xiàng)目中的微信是1.5版本的。應(yīng)該進(jìn)行替換。command+B編譯無(wú)錯(cuò)誤提示。應(yīng)該沒(méi)事。
比較可笑的是微信的sdk包是支持ipv6的,但是微信本身并不支持ipv6,所以說(shuō),即便你替換了最新的sdk包,在ipv6網(wǎng)絡(luò)下還是不能用微信分享,因?yàn)槟愕腶pp應(yīng)用在ipv6網(wǎng)絡(luò)環(huán)境下調(diào)不起微信,也就分享不了了,這個(gè)問(wèn)題微信應(yīng)該意識(shí)到了,估計(jì)后邊的版本應(yīng)該也是支持ipv6的吧。
6、QQ
官方文檔好像也沒(méi)有說(shuō)ipv6的事啊
7、支付寶sdk支持了ipv6!!!
可是下載的時(shí)候總是打不開(kāi).zip的壓縮包。。。叫別人幫忙下載了一份
command+B編譯無(wú)錯(cuò)誤提示。應(yīng)該沒(méi)事。
8、百度地圖
根據(jù)比較,新的sdk包沒(méi)有了bundle文件。需要將舊包的bundle文件拷貝進(jìn)來(lái)。
各個(gè)sdk下載地址:
reachability
新浪微博
連連支付
友盟統(tǒng)計(jì)分析
微信
支付寶
百度地圖
總之,對(duì)于ipv6_Only的處理就是這樣辦的,從兩大方面進(jìn)行自己審核:自身網(wǎng)絡(luò)請(qǐng)求和三方涉及網(wǎng)絡(luò)請(qǐng)求。
關(guān)于AFNetworking是否支持ipv-6,有網(wǎng)友如是說(shuō):
可見(jiàn),AFNetworking是支持ipv-6的。但是,關(guān)于支持ipv6的afn版本有如下說(shuō)明:
另外有網(wǎng)友遇到這樣一個(gè)問(wèn)題:這里還遇到一個(gè)坑,內(nèi)網(wǎng)的訪問(wèn)下是不可能連接到自己的服務(wù)器,后面測(cè)試一下公網(wǎng)阿里云的服務(wù)器,能夠正常連接,這個(gè)可能是DNS64在搜索ipv6的過(guò)程中,并沒(méi)有搜索內(nèi)網(wǎng)的網(wǎng)絡(luò),導(dǎo)致內(nèi)網(wǎng)連接失敗(這里卡了半天, 切記)(這個(gè)問(wèn)題筆者并沒(méi)有遇到,也沒(méi)有親測(cè),大家注意一下這個(gè)問(wèn)題,如果遇到了,知道是怎么回事。)
最后,有的網(wǎng)友上線被拒了,可能是因?yàn)閍pp的服務(wù)器端沒(méi)有支持ipv6,就此問(wèn)題,我咨詢了我們的技術(shù)經(jīng)理,技術(shù)經(jīng)理說(shuō)“后臺(tái)(即服務(wù)器)是要做ipv6的支持工作的”。但是具體是誰(shuí)管,具體怎么操作的我就不得而知了,這里大家注意一下吧:不僅僅是客戶端這邊支持ipv6,上線之前最好問(wèn)一下后臺(tái)端是不是做了相應(yīng)的ipv6的支持。
這里關(guān)于自己的服務(wù)器是否支持ipv6,有網(wǎng)友提供了一個(gè)方法,大家可以試一下。(謝謝杭州-托兒索被拒6次的ipv6,爭(zhēng)得托兒索的同意,進(jìn)行轉(zhuǎn)發(fā))
前兩條說(shuō)的就是我們的方案:項(xiàng)目里面涉及和網(wǎng)絡(luò)有關(guān)的進(jìn)行一一排查。
第三條是在自己電腦上判斷是否服務(wù)器支持ipv6的。親測(cè),在終端得到下圖:
按照托兒索的說(shuō)法,上圖的位置那里顯示NOERROR說(shuō)明服務(wù)器沒(méi)有問(wèn)題,也是支持ipv6的。如果有錯(cuò)的話,可以按照下邊提供的表格進(jìn)行對(duì)照。
再看托兒所的結(jié)論,我們會(huì)得到下邊的結(jié)論,涉及支持ipv6的其實(shí)是包括三個(gè)方面的:
1、項(xiàng)目里面涉及和網(wǎng)絡(luò)有關(guān)的網(wǎng)絡(luò)請(qǐng)求是否支持ipv6。
2、項(xiàng)目里面涉及和網(wǎng)絡(luò)有關(guān)的sdk是否支持ipv6。
3、項(xiàng)目的服務(wù)器是否支持ipv6。
最后,說(shuō)一下關(guān)于托兒索的命令行:終端? dig +nocmd + nostats 你的域名 AAAA,我在網(wǎng)上查了一下發(fā)現(xiàn)有這么個(gè)命令行:
為了方便復(fù)制:digwww.isc.orgAAAA +short?
得到的結(jié)果直接就是一個(gè)ipv6格式的,不知道不支持ipv6服務(wù)器的是不是打印出來(lái)的是不是ip地址(有待驗(yàn)證)。如果誰(shuí)驗(yàn)證了,希望告知我一聲。在此謝謝了。所以也可以用這個(gè)命令行側(cè)面驗(yàn)證服務(wù)器是否支持ipv6。
?
參考文章:
http://www.jianshu.com/p/97b205933c15
轉(zhuǎn)載于:https://www.cnblogs.com/WiliamF/p/6264702.html
總結(jié)