App審核被拒——Ipv6相關(guān)
? ? ? ? 首先,檢測(cè)App是否支持IPv6。
? ? ? ? 教程1:連網(wǎng)線建立ipv6測(cè)試環(huán)境。
? ? ? ? 教程2:無(wú)網(wǎng)線建立ipv6測(cè)試環(huán)境
? ? ? ? 官方文檔:連網(wǎng)線建立ipv6測(cè)試環(huán)境。
? ? ? ? 若是測(cè)試通過(guò),則說(shuō)明客戶端應(yīng)用在IPv6網(wǎng)絡(luò)下,是(基本)沒(méi)有問(wèn)題的。但是此操作無(wú)法驗(yàn)證服務(wù)器能夠?qū)Pv6網(wǎng)絡(luò)做出正確的響應(yīng)。
? ? ? ? 若是IPv6測(cè)試環(huán)境測(cè)試沒(méi)有通過(guò),解決方案:
? ? ? ? ① 更換第三方的SDK至最新版本。支付寶支付,微信支付,第三方登錄、分享,環(huán)信等。
? ? ? ? ② 老版本的網(wǎng)絡(luò)請(qǐng)求函數(shù)。ASI,AFN。注意:確認(rèn)IPv6搭建連接是否正確,所有功能是否在IPv6下都測(cè)試了,App需安裝在iPhon6以上的機(jī)器測(cè)試,iPhon5連不上IPv6 wifi,搭建IPv6可以使用Mac連接網(wǎng)線(教程1)或Mac連無(wú)線(教程2)。
? ? ? ? ③ socket請(qǐng)求適配IPv6,我們這暫時(shí)沒(méi)有使用這方面,可略過(guò)此操作。參考。
? ? ? ? ④?在IPv6下,測(cè)試App所有界面,哪里網(wǎng)絡(luò)連接失敗就換或者改對(duì)應(yīng)的代碼。
? ? ? ? 一般,這些操作后,App通過(guò)IPv6測(cè)試是沒(méi)問(wèn)題的。
? ? ? ?還需要檢測(cè)服務(wù)器是否支持IPv6。打開(kāi)終端,執(zhí)行dig +nocmd +nostats 域名 AAAA

? ? ? ? 若執(zhí)行后,status對(duì)應(yīng)的碼是NOERROR,則基本沒(méi)問(wèn)題。如果返回的響應(yīng)是SERVFAIL,在已經(jīng)驗(yàn)證了客戶端沒(méi)有問(wèn)題前提下,剩下的就是運(yùn)維、后臺(tái)的工作了,需要服務(wù)器更改DNS配置,直到穩(wěn)定返回NOERROR。
? ? ? ? 以上操作跑一遍后,提交審核,還是并不能保證審核百分之百能過(guò)。對(duì)策:
? ? ? ? ① 運(yùn)維/服務(wù)器參考:針對(duì)蘋果官方ipv6審核的綜合解決方案?及內(nèi)部鏈接;
? ? ? ? ② 拍視頻給審核人員,視頻內(nèi)容需詳細(xì):搭建環(huán)境的過(guò)程(上面教程1或者2的操作過(guò)程)。手機(jī)打開(kāi)飛行模式,正確連接電腦wifi的過(guò)程,所有標(biāo)記搭建IPv6環(huán)境搭建成功的畫面,App所有界面(都可以加載數(shù)據(jù))運(yùn)行良好的狀態(tài)的畫面。視頻展示給審核人員的方法:① 視頻傳到y(tǒng)outwobe,把視頻鏈接Reply給蘋果。② 直接Reply視頻文件壓縮打包給蘋果。我在用戶端1.0版提交審核時(shí)使用過(guò)這個(gè)方法,審核通過(guò)(注:我們的用戶端1.0被拒,蘋果給出的不是IPv6)。
? ? ? ? 客戶端代碼部分是咱們開(kāi)發(fā)者自己解決。至于服務(wù)器端無(wú)法解決,有必要找專業(yè)人員參與。
? ? ? ? 最后,IPv6的整體流程:
? ? ? ? 1)先搭建IPv6測(cè)試環(huán)境;
? ? ? ? 2)確保服務(wù)器支持IPv6;
? ? ? ? 3)再把每個(gè)界面點(diǎn)一下,觀察所有的網(wǎng)絡(luò)是否有異常,哪里不會(huì)(對(duì))點(diǎn)(修改或者更換)哪里;
? ? ? ? 4)服務(wù)器端無(wú)法解決,有必要找專業(yè)人員參與。
? ? ? ? ?一個(gè)情況,我們的用戶端App 2.0第一次提交審核被拒,蘋果給出原因IPv6。情況分析:2016年12月31日提交審核,在提交審核之前,測(cè)試所有流程均可跑通。2017年1月6日,蘋果給出審核結(jié)果,是IPv6,登錄界面無(wú)法登錄進(jìn)入App。測(cè)試后發(fā)現(xiàn):在iOS10.0的真機(jī)上,所有流程還是沒(méi)問(wèn)題。在10.3的模擬器或者真機(jī)上出現(xiàn)問(wèn)題。糾結(jié)一番后,向后臺(tái)要來(lái)證書,xxx.crt。需要把這個(gè).crt文件轉(zhuǎn)成.cer或者.der文件。打開(kāi)終端:
.crt轉(zhuǎn).der:openssl x509 –in xxx.crt文件路徑-out xxx.der文件路徑-outform DER
.crt轉(zhuǎn).cer:openssl x509 -in xxx.crt文件路徑-out xxx.cer文件路徑-outform DER
當(dāng)我把證書轉(zhuǎn)換后,在“鑰匙串訪問(wèn)”中查看此證書,可以看到:

? ? ? ? 也就是由不被信任的簽發(fā)者簽名頒發(fā)的。查一下StartCom,這是被沃通收購(gòu)的機(jī)構(gòu)(http://digi.163.com/16/1102/09/C4RVPJA1001687H3.html)。沃通和StartCom由于涉及到一些非法簽名的案例,先后被蘋果和谷歌取消信任,等待其悔過(guò)自新……至于什么時(shí)候能恢復(fù)信任,還是未知數(shù);
? ? ? ? 把請(qǐng)求的https://ssl.heartbook.com.cn放到Safari里,第一次有“此網(wǎng)址不被信任,是否繼續(xù)”的提示;
? ? ? ?另外,檢測(cè)HTTPS服務(wù)器是否符合ATS特性中的要求:終端執(zhí)行:nscurl --ats-diagnostics --verbose?https://xxx.com


? ? ? ? 截圖是檢測(cè)我們的HTTPS服務(wù)器,TLSv1.0 /1.1 /1.2,result均為FAIL。原因:不受信任的證書,通不過(guò)ATS的檢測(cè)。
? ? ? ? 那么,我們的用戶端App2.0審核被拒的原因,是服務(wù)器證書不被信任造成的。
? ? ? ? 解決此問(wèn)題的方法:
? ? ? ? ① 通過(guò)代碼來(lái)調(diào)整,信任服務(wù)器的證書(我的解決辦法是使用的這個(gè)方法)。個(gè)人覺(jué)得壞處是:以后的每個(gè)App里面都要這么設(shè)置,或者蘋果又要修改什么后會(huì)有未知情況發(fā)生,影響已上線的App,需要重新發(fā)版本才能修復(fù)線上,但重新發(fā)版本又需要一定的審核時(shí)間。
? ? ? ? 首先,按上文步驟,向服務(wù)器要證書,轉(zhuǎn)成.cer,把.cer文件拖到工程里。我們的請(qǐng)求工具是用AFnetworking封裝的類,修改此類,添加代碼。關(guān)鍵代碼:在AFHTTPSessionManager實(shí)例化前,設(shè)置securityPolicy.allowInvalidCertificates = YES;(截圖中handle是AFHTTPSessionManager)。

? ? ? ? ② 服務(wù)器端使用受信任、合法的證書。使用這個(gè)解決方案,可以說(shuō)治標(biāo)治本。App端基本什么都不用管,http改成https就OK。個(gè)人覺(jué)得好處:如果蘋果官方做有關(guān)這方面的改動(dòng),對(duì)已上線的App影響不會(huì)太大。起碼出問(wèn)題受影響的線上App不用重新發(fā)版本,只需服務(wù)器端做相應(yīng)的修改,即可修復(fù)。
? ? ? ? 補(bǔ)充一點(diǎn):解決Mac Pro無(wú)法插網(wǎng)線上網(wǎng)( 不是廣告 *(→ _ ←)* )。
? ? ? ? 由于Mac自身機(jī)身厚度的限制,使機(jī)身本身無(wú)法直接連接網(wǎng)線。那么就需要一個(gè)外接網(wǎng)線轉(zhuǎn)換頭,我使用的是綠聯(lián)的產(chǎn)品(綠聯(lián)USB百兆網(wǎng)卡)。
? ? ? ? 如果Mac是第一次是使用這個(gè)產(chǎn)品,需要安裝驅(qū)動(dòng)。驅(qū)動(dòng)下載連接:http://www.lulian.cn/download/26-cn.html。下載時(shí)選擇Mac OX 10.*對(duì)應(yīng)的驅(qū)動(dòng)。驅(qū)動(dòng)安裝是類似Windows傻瓜式的安裝方式,一路下一步,最后“完成”,重啟電腦。
? ? ? ? 重啟后,插上設(shè)備,連上網(wǎng)線,打開(kāi)系統(tǒng)偏好設(shè)置–網(wǎng)絡(luò)–點(diǎn)擊左下角的“+”號(hào)–點(diǎn)開(kāi)接口(可以發(fā)現(xiàn)別安裝驅(qū)動(dòng)前多了一個(gè)選項(xiàng):USB以太網(wǎng),選之)-服務(wù)名稱(自己起個(gè)名字)-創(chuàng)建即可。


參考:
關(guān)于iOS啟用ATS安全標(biāo)準(zhǔn)的說(shuō)明