一、關于IPV6審核問題
最近上架爆出很多IPV6的問題,也不知道蘋果怎么了。具體出現這個問題的原因眾說紛紜,但是因為蘋果不具體給出原因所以無法確定。
具體原因主要有以下幾種:
- 移動端iPhone端未支持IPV6
- 服務器端未支持IPV6或者服務器所在的DNS服務器未支持IPV6地址的查詢響應
- 移動端iPhone端支持IPV6測試沒問題,但是蘋果測試的時候都是用PAD來測試的,所以我們也需要用PAD來測試下看是否也OK
解決辦法有以下幾種:
- 確定iPhone端和iPad端都支持IPV6,然后服務器支持IPV6或者服務器所在的DNS服務器支持IPV6地址的查詢響應,那么可以錄制視頻申訴
- 購買海外或者香港服務器,審核的時候用海外或者香港服務器,過審核之后再切回國內服務器
二、搭建iOS端IPV6測試環境
具體的我們iOS端支不支持IPV6我們需要通過搭建測試環境來看,具體搭建步驟如下。
1、IPV6簡介
- 與IPV6一起相對的是IPV4,這是IP地址的兩種表示方式.
- IPV4是32位,采用點分十進制,分四段,每段8位,每一段將8位二進制化成十進制就有了點分十進制,示例如右:192.168.1.101。但是早在20年前就基本上快不夠分了,具體的有ABCDE等幾類地址,這個可以百度詳查。32位可供用的地址的確不能滿足日益龐大的網絡用戶去分,為了延緩這個問題,出了NAT(網絡地址轉換)技術,這個技術的核心思想是將地址分為公網地址和私網地址,然后私網地址在網絡出口的時候轉換成公網地址去訪問公網資源。但是這畢竟只是延緩,不能解決根本問題。
- IPV6地址,這個是128位的,采用:分割的方式,分8段,每一段16位,將每一段的16位二進制化成4位16進制,示例如右:2001:0000: 1F1F :0000:0000:0100: 11A0:ADDF。
2、搭建測試環境
- 所需工具:MAC電腦一臺,測試設備(iPhone)一臺,網絡轉換口(下面附截圖)一個
這個蘋果官網價格很貴,可以到天貓淘寶買一個幾十塊錢
- 將MAC電腦連接網絡轉換口,一端接MAC電腦,一端接以太網口(RJ45口,具體百度),請確保這個以太網口另外一端是能連接外網的.然后確定MAC能通過這個以太網口去上網,而不是通過WiFi上網
- 確保MAC通過有線上網后,我們就要開始搭建測試環境了,打開系統偏好設置,左上角蘋果圖標->系統偏好設置,如下:
- 找到共享,然后在系統偏好這個界面按住Option鍵+單擊以上圖示中的共享,出現如下畫面:
- 勾選創建NAT64網絡:
- 勾選共享來源:
-
如果是USB轉RJ45的,那么選擇類似以下的接口來共享
Snip20170517_200.png:
- 如果是Thunderbolt轉RJ45的,那么選以下類似的接口來共享:
- 再勾選下圖中的Wi-Fi:
- 點擊下圖中的創建NAT64網絡右邊的”Wi-Fi選項...“:
- 設置好Wi-Fi后,單擊如下選項:
- 勾選互聯網共享后,就會出現如下對話框:
-
點擊啟動后過十幾秒就會發射一個kodiewifi出來,如果出現以下的情況證明網絡已經建好:
Snip20170517_203.png
- 然后我們用測試設備連接這個WiFi來測試,此處選用iPhone來測試,連接WiFi后像如下情況就正常了:
對比下普通的WiFi,明顯能看到點分十進制和冒號的區別:
- 然后打開瀏覽器先測試下網絡是否正常,如果正常,然后再行測試下你的工程項目是否能夠正常運行,如果能夠正常運行說明IPV6沒有問題,然后最好將你的項目運行在iPad上再次測試一下。
備注
- 在使用 IPv6 的熱點時候,保證手機只在 Wi-Fi 下上網,以免手機在連接不到網絡時候,會默認跳轉到使用蜂窩移動網絡(即2G、3G、4G流量)上網,而且蘋果手機如果這個WiFi上不了網很容易自動切換到之前的WiFi去上,所以這個一定要注意哦~~~
- 注意如果說你連上IPV6熱點后,發現手機上不了網,請檢查下如下配置是否開啟:
以上默認是開啟的,但是如果是升級Yosemit系統后不能設置IP地址上網請看以下解決方案:
打開終端按如下命令操作
1.列出你的網卡
networksetup -listallnetworkservices
2.關閉ipv6
networksetup -setv6off "網卡名字"
注:
關于”網卡名字“,有線網一般默認名字是Ethernet,無線網默認名字是Wi-Fi,在第1步的命令里可以看到。在2步中網卡名字有沒有引號好像都可以。
具體看Mac收集的技巧及bug
還有其他設置網絡的設置:
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
下圖中的設置分別是:
關閉:networksetup -setv6off <networkservice>
手動:networksetup -setv6automatic <networkservice>
本地:networksetup -setv6LinkLocal <networkservice>
三、服務器端測試
蘋果明確表示服務器不需要支持 IPv6,但是有一點蘋果沒有指出來需要說明一下:雖然你的服務器不用支持 IPv6,但是我蘋果這邊會用IPV6的地址來測試訪問你的服務器域名,如果我們服務器所掛的DNS服務器不支持IPV6地址前來查詢那么也就無法響應網絡請求了。如果你的服務器是IPV4地址,那么DNS服務器上可以添加一條域名與IPV6地址的解析條目,然后解析出來的IPV6地址指向一臺中轉路由器(IPV6<=>IPV4),這樣通過中轉路由器出來的就是IPV4地址了,這樣就可以大大方方響應你的網絡請求了。
測試是否支持IPV6查詢,終端輸入以下命令:
dig +nocmd +nostats www.baidu.com AAAA
解析后的結果如下,那說明是支持的:
具體的可參見:
App store 應用審核由于 IPv6 網絡問題被拒的一點分析
【指南】本地如何搭建IPv6環境測試你的APP
搭建IPv6本地環境測試App
以上!!!