一、關(guān)于IPV6審核問題
最近上架爆出很多IPV6的問題,也不知道蘋果怎么了。具體出現(xiàn)這個問題的原因眾說紛紜,但是因?yàn)樘O果不具體給出原因所以無法確定。
具體原因主要有以下幾種:
- 移動端iPhone端未支持IPV6
- 服務(wù)器端未支持IPV6或者服務(wù)器所在的DNS服務(wù)器未支持IPV6地址的查詢響應(yīng)
- 移動端iPhone端支持IPV6測試沒問題,但是蘋果測試的時候都是用PAD來測試的,所以我們也需要用PAD來測試下看是否也OK
解決辦法有以下幾種:
- 確定iPhone端和iPad端都支持IPV6,然后服務(wù)器支持IPV6或者服務(wù)器所在的DNS服務(wù)器支持IPV6地址的查詢響應(yīng),那么可以錄制視頻申訴
- 購買海外或者香港服務(wù)器,審核的時候用海外或者香港服務(wù)器,過審核之后再切回國內(nèi)服務(wù)器
二、搭建iOS端IPV6測試環(huán)境
具體的我們iOS端支不支持IPV6我們需要通過搭建測試環(huán)境來看,具體搭建步驟如下。
1、IPV6簡介
- 與IPV6一起相對的是IPV4,這是IP地址的兩種表示方式.
- IPV4是32位,采用點(diǎn)分十進(jìn)制,分四段,每段8位,每一段將8位二進(jìn)制化成十進(jìn)制就有了點(diǎn)分十進(jìn)制,示例如右:192.168.1.101。但是早在20年前就基本上快不夠分了,具體的有ABCDE等幾類地址,這個可以百度詳查。32位可供用的地址的確不能滿足日益龐大的網(wǎng)絡(luò)用戶去分,為了延緩這個問題,出了NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)技術(shù),這個技術(shù)的核心思想是將地址分為公網(wǎng)地址和私網(wǎng)地址,然后私網(wǎng)地址在網(wǎng)絡(luò)出口的時候轉(zhuǎn)換成公網(wǎng)地址去訪問公網(wǎng)資源。但是這畢竟只是延緩,不能解決根本問題。
- IPV6地址,這個是128位的,采用:分割的方式,分8段,每一段16位,將每一段的16位二進(jìn)制化成4位16進(jìn)制,示例如右:2001:0000: 1F1F :0000:0000:0100: 11A0:ADDF。
2、搭建測試環(huán)境
- 所需工具:MAC電腦一臺,測試設(shè)備(iPhone)一臺,網(wǎng)絡(luò)轉(zhuǎn)換口(下面附截圖)一個
這個蘋果官網(wǎng)價格很貴,可以到天貓?zhí)詫氋I一個幾十塊錢
- 將MAC電腦連接網(wǎng)絡(luò)轉(zhuǎn)換口,一端接MAC電腦,一端接以太網(wǎng)口(RJ45口,具體百度),請確保這個以太網(wǎng)口另外一端是能連接外網(wǎng)的.然后確定MAC能通過這個以太網(wǎng)口去上網(wǎng),而不是通過WiFi上網(wǎng)
- 確保MAC通過有線上網(wǎng)后,我們就要開始搭建測試環(huán)境了,打開系統(tǒng)偏好設(shè)置,左上角蘋果圖標(biāo)->系統(tǒng)偏好設(shè)置,如下:
- 找到共享,然后在系統(tǒng)偏好這個界面按住Option鍵+單擊以上圖示中的共享,出現(xiàn)如下畫面:
- 勾選創(chuàng)建NAT64網(wǎng)絡(luò):
- 勾選共享來源:
-
如果是USB轉(zhuǎn)RJ45的,那么選擇類似以下的接口來共享
Snip20170517_200.png:
- 如果是Thunderbolt轉(zhuǎn)RJ45的,那么選以下類似的接口來共享:
- 再勾選下圖中的Wi-Fi:
- 點(diǎn)擊下圖中的創(chuàng)建NAT64網(wǎng)絡(luò)右邊的”Wi-Fi選項(xiàng)...“:
- 設(shè)置好Wi-Fi后,單擊如下選項(xiàng):
- 勾選互聯(lián)網(wǎng)共享后,就會出現(xiàn)如下對話框:
-
點(diǎn)擊啟動后過十幾秒就會發(fā)射一個kodiewifi出來,如果出現(xiàn)以下的情況證明網(wǎng)絡(luò)已經(jīng)建好:
Snip20170517_203.png
- 然后我們用測試設(shè)備連接這個WiFi來測試,此處選用iPhone來測試,連接WiFi后像如下情況就正常了:
對比下普通的WiFi,明顯能看到點(diǎn)分十進(jìn)制和冒號的區(qū)別:
- 然后打開瀏覽器先測試下網(wǎng)絡(luò)是否正常,如果正常,然后再行測試下你的工程項(xiàng)目是否能夠正常運(yùn)行,如果能夠正常運(yùn)行說明IPV6沒有問題,然后最好將你的項(xiàng)目運(yùn)行在iPad上再次測試一下。
備注
- 在使用 IPv6 的熱點(diǎn)時候,保證手機(jī)只在 Wi-Fi 下上網(wǎng),以免手機(jī)在連接不到網(wǎng)絡(luò)時候,會默認(rèn)跳轉(zhuǎn)到使用蜂窩移動網(wǎng)絡(luò)(即2G、3G、4G流量)上網(wǎng),而且蘋果手機(jī)如果這個WiFi上不了網(wǎng)很容易自動切換到之前的WiFi去上,所以這個一定要注意哦~~~
- 注意如果說你連上IPV6熱點(diǎn)后,發(fā)現(xiàn)手機(jī)上不了網(wǎng),請檢查下如下配置是否開啟:
以上默認(rèn)是開啟的,但是如果是升級Yosemit系統(tǒng)后不能設(shè)置IP地址上網(wǎng)請看以下解決方案:
打開終端按如下命令操作
1.列出你的網(wǎng)卡
networksetup -listallnetworkservices
2.關(guān)閉ipv6
networksetup -setv6off "網(wǎng)卡名字"
注:
關(guān)于”網(wǎng)卡名字“,有線網(wǎng)一般默認(rèn)名字是Ethernet,無線網(wǎng)默認(rèn)名字是Wi-Fi,在第1步的命令里可以看到。在2步中網(wǎng)卡名字有沒有引號好像都可以。
具體看Mac收集的技巧及bug
還有其他設(shè)置網(wǎng)絡(luò)的設(shè)置:
networksetup -listnetworkserviceorder
networksetup -listallnetworkservices
networksetup -listallhardwareports
networksetup -detectnewhardware
networksetup -getmacaddress <hardwareport or device name>
networksetup -getcomputername
networksetup -setcomputername <name>
networksetup -getinfo <networkservice>
networksetup -setmanual <networkservice> <ip> <subnet> <router>
networksetup -setdhcp <networkservice> [clientid]
networksetup -setbootp <networkservice>
networksetup -setmanualwithdhcprouter <networkservice> <ip>
networksetup -getadditionalroutes <networkservice>
networksetup -setadditionalroutes <networkservice> [ <dest> <mask> <gateway> ]*
networksetup -setv4off <networkservice>
networksetup -setv6off <networkservice>
networksetup -setv6automatic <networkservice>
networksetup -setv6LinkLocal <networkservice>
networksetup -setv6manual <networkservice> <networkservice> <address> <prefixlength> <router>
networksetup -getv6additionalroutes <networkservice>
networksetup -setv6additionalroutes <networkservice> [ <dest> <prefixlength> <gateway> ]*
networksetup -getdnsservers <networkservice>
networksetup -setdnsservers <networkservice> <dns1> [dns2] [...]
networksetup -getsearchdomains <networkservice>
networksetup -setsearchdomains <networkservice> <domain1> [domain2] [...]
networksetup -create6to4service <newnetworkservicename>
networksetup -set6to4automatic <networkservice>
networksetup -set6to4manual <networkservice> <relayaddress>
networksetup -getftpproxy <networkservice>
networksetup -setftpproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setftpproxystate <networkservice> <on off>
networksetup -getwebproxy <networkservice>
networksetup -setwebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setwebproxystate <networkservice> <on off>
networksetup -getsecurewebproxy <networkservice>
networksetup -setsecurewebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setsecurewebproxystate <networkservice> <on off>
networksetup -getstreamingproxy <networkservice>
networksetup -setstreamingproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setstreamingproxystate <networkservice> <on off>
networksetup -getgopherproxy <networkservice>
networksetup -setgopherproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setgopherproxystate <networkservice> <on off>
networksetup -getsocksfirewallproxy <networkservice>
networksetup -setsocksfirewallproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setsocksfirewallproxystate <networkservice> <on off>
networksetup -getproxybypassdomains <networkservice>
networksetup -setproxybypassdomains <networkservice> <domain1> [domain2] [...]
networksetup -getproxyautodiscovery <networkservice>
networksetup -setproxyautodiscovery <networkservice> <on off>
networksetup -getpassiveftp <networkservice>
networksetup -setpassiveftp <networkservice> <on off>
networksetup -getairportnetwork <device name>
networksetup -setairportnetwork <device name> <network> [password]
networksetup -getairportpower <device name>
networksetup -setairportpower <device name> <on off>
networksetup -listpreferredwirelessnetworks <device name>
networksetup -addpreferredwirelessnetworkatindex <device name> <network> <index> <security type> [password]
networksetup -removepreferredwirelessnetwork <device name> <network>
networksetup -removeallpreferredwirelessnetworks <device name>
networksetup -getnetworkserviceenabled <networkservice>
networksetup -setnetworkserviceenabled <networkservice> <on off>
networksetup -createnetworkservice <newnetworkservicename> <hardwareport>
networksetup -renamenetworkservice <networkservice> <newnetworkservicename>
networksetup -duplicatenetworkservice <networkservice> <newnetworkservicename>
networksetup -removenetworkservice <networkservice>
networksetup -ordernetworkservices <service1> <service2> <service3> <...>
networksetup -getMTU <hardwareport or device name>
networksetup -setMTU <hardwareport or device name> <value>
networksetup -listvalidMTUrange <hardwareport or device name>
networksetup -getmedia <hardwareport or device name>
networksetup -setmedia <hardwareport or device name> <subtype> [option1] [option2] [...]
networksetup -listvalidmedia <hardwareport or device name>
networksetup -createVLAN <VLAN name> <parent device name> <tag>
networksetup -deleteVLAN <VLAN name> <parent device name> <tag>
networksetup -listVLANs
networksetup -listdevicesthatsupportVLAN
networksetup -isBondSupported <hardwareport>
networksetup -createBond <bondname> <hardwareport1> <hardwareport2> <...>
networksetup -deleteBond <bonddevicename>
networksetup -addDeviceToBond <hardwareport> <bonddevicename>
networksetup -removeDeviceFromBond <hardwareport> <bonddevicename>
networksetup -listBonds
networksetup -showBondStatus <bonddevicename>
networksetup -listpppoeservices
networksetup -showpppoestatus <service name ie., MyPPPoEService>
networksetup -createpppoeservice <device name ie., en0> <service name> <account name> <password> [pppoe service name]
networksetup -deletepppoeservice <service name>
networksetup -setpppoeaccountname <service name> <account name>
networksetup -setpppoepassword <service name> <password>
networksetup -connectpppoeservice <service name>
networksetup -disconnectpppoeservice <service name>
networksetup -getcurrentlocation
networksetup -listlocations
networksetup -createlocation <location name> [populate]
networksetup -deletelocation <location name>
networksetup -switchtolocation <location name>
networksetup -listalluserprofiles
networksetup -listloginprofiles <service name>
networksetup -enablesystemprofile <service name> <on off>
networksetup -enableloginprofile <service name> <profile name> <on off>
networksetup -enableuserprofile <profile name> <on off>
networksetup -import8021xProfiles <service name> <file path>
networksetup -export8021xProfiles <service name> <file path> <yes no>
networksetup -export8021xUserProfiles <file path> <yes no>
networksetup -export8021xLoginProfiles <service name> <file path> <yes no>
networksetup -export8021xSystemProfile <service name> <file path> <yes no>
networksetup -settlsidentityonsystemprofile <service name> <file path> <passphrase>
>networksetup -settlsidentityonuserprofile <profile name> <file path> <passphrase>networksetup -deletesystemprofile <service name>
networksetup -deleteloginprofile <service name> <profile name>
networksetup -deleteuserprofile <profile name>
networksetup -version
networksetup -help
networksetup -printcommands
下圖中的設(shè)置分別是:
關(guān)閉:networksetup -setv6off <networkservice>
手動:networksetup -setv6automatic <networkservice>
本地:networksetup -setv6LinkLocal <networkservice>
三、服務(wù)器端測試
蘋果明確表示服務(wù)器不需要支持 IPv6,但是有一點(diǎn)蘋果沒有指出來需要說明一下:雖然你的服務(wù)器不用支持 IPv6,但是我蘋果這邊會用IPV6的地址來測試訪問你的服務(wù)器域名,如果我們服務(wù)器所掛的DNS服務(wù)器不支持IPV6地址前來查詢那么也就無法響應(yīng)網(wǎng)絡(luò)請求了。如果你的服務(wù)器是IPV4地址,那么DNS服務(wù)器上可以添加一條域名與IPV6地址的解析條目,然后解析出來的IPV6地址指向一臺中轉(zhuǎn)路由器(IPV6<=>IPV4),這樣通過中轉(zhuǎn)路由器出來的就是IPV4地址了,這樣就可以大大方方響應(yīng)你的網(wǎng)絡(luò)請求了。
測試是否支持IPV6查詢,終端輸入以下命令:
dig +nocmd +nostats www.baidu.com AAAA
解析后的結(jié)果如下,那說明是支持的:
具體的可參見:
App store 應(yīng)用審核由于 IPv6 網(wǎng)絡(luò)問題被拒的一點(diǎn)分析
【指南】本地如何搭建IPv6環(huán)境測試你的APP
搭建IPv6本地環(huán)境測試App
以上!!!