關於IPV6審覈被拒的完整分析

原文:
關於IPV6審覈被拒的完整分析php

自從去年6月1號Apple明文規定全部開發者提交新版本都必須支持IPV6-Only的網絡,估計不少iOS開發者都遇到因爲IPV6網絡不支持形成的審覈被拒的狀況, 我被坑的不輕啊, 下面就來分析一下IPV6問題如何解決。html

首先附一個審覈被拒的原文:ios

Guideline 2.1 - Performance - App Completeness
We discovered one or more bugs in your app when reviewed on iPad running iOS 10.3.2 on Wi-Fi connected to an IPv6 network.
Specifically, the app launched to a blank page.
Please see attached screenshots for details.git

Next Steps
To resolve this issue, please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify any issues, 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. For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue.github

大意是在iPad上運行iOS 10.3.2 wi - fi鏈接到IPv6網絡, 應用程序啓動是一個空白頁。請在設備上運行您的應用程序,鏈接到IPv6網絡, 而後修改並從新提交你的應用程序進行審查。objective-c

一. 簡單介紹一下IPV6以及如何搭建檢測環境

首先IPV6,是對IPV4地址空間的擴充。目前當咱們用iOS設備鏈接上Wifi、4G、3G等網絡時,設備被分配的地址均是IPV4地址,可是隨着運營商和企業逐漸部署IPV6 DNS64/NAT64網絡以後,設備被分配的地址會變成IPV6的地址,而這些網絡就是所謂的IPV6-Only網絡,而且仍然能夠經過此網絡去獲取IPV4地址提供的內容。簡單來講就是IPV4不夠用了, 要換IPV6, 這從蘋果一貫的以用戶體驗爲主出發, 其實也是爲了讓用戶能用着舒服;
測試是否支持IPV6網上已有更多詳細的方法, 照着搭建就行, 下方附搭建環境的方法:服務器

二. 解決辦法

總的來講有三個方面的問題:微信

  • 服務器不支持IPV6
  • 項目中導入的第三方SDK不支持IPV6
  • 項目中涉及到的網絡請求不支持IPV6

除了這些, 還有些其餘因素, 好比蘋果正在審覈, 而大家的後臺在部署接口, 這種纔是真的坑爹😤啊, 很少說, 感受眼淚止不住往下流了;網絡

1. 服務器

①檢測服務器是否支持IPV6
終端輸入如下代碼:(參照網上方法)app

dig +nocmd + nostats 你的域名 AAAA

這是看看大家的服務器在IPV6下是否有迴應。

簡書的域名檢測
簡書的域名檢測

有錯誤的話, 對照下面的表:


改變DNS的配置,直到穩定返回 NOERROR 爲止。

②更改服務器配置
阿里雲 Ubuntu 支持 IPv6 的完整步驟

2. 第三方SDK

這些問題通常會出如今那些維護的APP裏面, 因爲是初次開發APP的人所處的時間相對較遠, 因此項目裏所用的SDK會有一些功能缺失; 下面介紹幾個第三方SDK的問題;
①Reachability


蘋果都發話, 這個固然要改了;
新的sdk包將這個方法幹掉了:reachabilityForLocalWiFi,只要本身的代碼中幹掉就好了,沒什麼影響。

緣由以下介紹:

#pragma mark reachabilityForLocalWiFi

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

//+ (instancetype)reachabilityForLocalWiFi;複製代碼

②JPush極光推送(v2.1.7開始支持)
這個是咱們項目裏遇到的問題, SDK版本低了, 不支持IPV6;


從圖中能夠看出, 2.1.7版本纔開始支持IPV6, 而咱們版本是2.1.0; 唉😔, 乖乖升級咯;
附:
極光文檔地址

③微博SDK(v3.1.4開始支持)


並且從官方文檔上發現, 更新SDK, 其實是更新Reachability庫;


附:
微博SDK文檔地址

④友盟(v5.2.1開始支持)


附:
友盟文檔地址

⑤微信(v1.5開始支持)


有簡友說微信的sdk包是支持ipv6的,可是微信自己並不支持ipv6,因此說,即使你替換了最新的sdk包,在ipv6網絡下仍是不能用微信分享,由於你的app應用在ipv6網絡環境下調不起微信,也就分享不了了,這個問題微信應該意識到了,估計後邊的版本應該也是支持ipv6, 這個你們能夠注意下;
附:
微信文檔地址

⑥QQ(未說明)


從變動歷史也看不出從哪一個版本開始支持的, 估計是以爲這點玩意兒不值得說吧. 大佬們的世界真是看不懂, 你們就按時間來估計吧;
附:
QQ文檔地址

⑦支付寶(未說明)


看下載的demo裏面, 版本更新歷史對具體哪一個版本更新的未說明, 萬一是最近被蘋果打壓的才更新的, 也不必定, 反正最新版本確定是有了, 並且還多了些其餘功能;
附:
支付寶文檔地址

⑧百度地圖(v3.0.0開始支持)


附:
百度地圖文檔地址

⑨環信(v3.1.3開始支持)


附:
環信文檔地址

⑩科大訊飛語音(v1.133開始支持)


附:
科大訊飛語音文檔地址

固然還有不少其餘的SDK, 這裏就不一一列舉了, 根據項目裏用了哪些, 看下官方文檔SDK版本歷史比對一下就行;

3. 網絡請求

其實對於ipv6_Only的處理,從兩大方面進行本身審覈:自身網絡請求和三方涉及網絡請求, 畢竟是因爲網絡問題;
關於AFNetworking是否支持IPV6, 下面是一網友的說法:

而版本支持是在3.0之後;

固然, 據說網友還遇到了其餘的問題:(這個我沒遇到, 不過仍是在這裏記一下😆)
內網的訪問下是不可能鏈接到本身的服務器,後面測試一下公網阿里雲的服務器,可以正常鏈接,這個多是DNS64在搜索ipv6的過程當中,並無搜索內網的網絡,致使內網鏈接失敗;

若是這些仍是沒能解決你的問題, 能夠看看下面這篇文章:
www.jianshu.com/p/a6bab07c4…

最後感謝參考文章做者的分享, 但願攻城獅們早日解決bug, 繼續擼代碼, O(∩_∩)O哈哈~

本文參考文章:
iOS 被拒6次的ipv6
Ipv6_Only 簡單的理解(已驗證,項目已經上線)

相關文章
相關標籤/搜索