俗話說:善始者實繁,克終者蓋寡.已經(jīng)有5個多月沒有更新簡書,真的感到羞愧.沒時間,工作忙,都是自己給自己開脫的借口.希望看到這篇文章的人不要像我一樣,做任何事,都要堅持下來!
雞湯的話,就不扯了,我們還是進(jìn)入正題要緊.蘋果要求2016年6月1號之后提交AppStore的所有App必須支持IPv6網(wǎng)絡(luò).此消息一出,iOS開發(fā)者們的面部表情是什么樣子的,大家可以自行腦補(bǔ).但是最多三天之后,我們還是得硬著頭皮來面對這個事實,因為抱怨并不能讓蘋果做出任何讓步和妥協(xié).
看到這一消息時,我也很慌張,上網(wǎng)查閱各種資料,畢竟現(xiàn)在中國的網(wǎng)絡(luò)還是IPv4.如何搭建網(wǎng)絡(luò)環(huán)境驗證我們的APP支持不支持IPv6的網(wǎng)絡(luò),簡書上已經(jīng)有很多這樣的文章了,不會的人可以去搜索一下.我記得我們是在7月15號左右發(fā)布的一個版本,上線前按照網(wǎng)上的教程,搭建了IPv6的環(huán)境,然后,打包,測試,一切都沒有問題.然后就信心滿滿的提交AppStore審核了,2-3天過后,成功通過.于是自信心就爆棚了.小宇宙就爆炸了,原因如下:
1.網(wǎng)上有人說適配IPv6網(wǎng)絡(luò)AFN需要升級到最新的3.0版本,但是又有人說不需要(AFN從2.0版本升級到3.0版本改動還是有點大的).我們沒有升級照樣審核通過.
2.網(wǎng)上有人說第三方的SDK(友盟,環(huán)信,聽云,QQ,微信,支付寶,微博等)也需要適配IPV6,所以需要升級到最新的版本,我們沒有升級一個照樣審核通過.
3.關(guān)于適配IPv6需要改動的東西,我們一個都沒有動,照樣審核通過.
后來,我們在開發(fā)直播版本之后,提交審核,照樣通過.至此我們所有的人也就沒有再理會IPv6的東西了,這期間有人也問過我關(guān)于IPv6的東西,我當(dāng)時還很鄙視他們,信心滿滿地說,我們的App什么都沒改,照樣木問題!!!后來我一個特別好的朋友也問我相關(guān)的東西,問我們這邊IPv6的東西是什么搞的,他們已經(jīng)被拒好多次了,我就把我們實際的情況給他講了下,他說:
根據(jù)他的經(jīng)驗,AppStore上的應(yīng)用過于繁多,蘋果一下子也忙不過來,對于IPv6的問題,蘋果應(yīng)該是對比較新的APP審核嚴(yán)格,但是對于一些2011年左右就上線的App,先放一邊,給他們個緩沖的時間.因為老的APP改動起來很費(fèi)勁,花費(fèi)的時間多!
你們的APP沒有任何改動,還能審核通過可以肯定你們運(yùn)氣很好,但是這事情,你最好仔細(xì)排查下,畢竟好多APP都因為這個原因被拒了.
支付寶之前的SDK就不支持IPv6,現(xiàn)在支持了,如果此問題不嚴(yán)重,我想支付寶是不會升級支持ipv6的.但是你們并沒有更新,所以我感覺你們APP在未來某一段時間,蘋果騰出手,就開始排查你們這些"資格老"的APP了, 因為已經(jīng)給你們修改和緩沖的時間了.
聽完他說的,說實話我還是有點鄙視的想法,也就沒有在意.截止到iOS10正式發(fā)布之前,我們發(fā)的所有的版本都沒有因為IPv6的問題被拒過.然后黑色一段時間就來了,因為我們是做電商的,雙十一這一版本對我們格外重要.按照往常,開發(fā)完,測試提交AppStore審核,被拒了!!!!!!!心中一億只草泥馬奔騰而過.公司領(lǐng)導(dǎo)也驚動了,因為這是電商的年度盛宴啊,雙十一版本如果審核不過,那么損失是無法估量的.沒辦法,全組成員熬夜加班來搞這個(現(xiàn)在想想都心里害怕).
開始我們還是按照之前的流程,搭建環(huán)境,測試頁面,都沒有問題,然后信息滿滿得提交AppStore,結(jié)果就是原封不動的給你打回來,郵件里寫明:IPv6審核不過!!!我靠,發(fā)生了什么靈異事件,蘋果大叔是要玩死我們這個幾個寶寶嗎?具體的情況也給CTO說了,我們測試的的確沒有問題,但是我們的CTO好像不滿意我們的答案.我們實在不想改動這個已經(jīng)年過花甲的APP,因為工程太大了,改的話,我們這幾個寶寶真的會因為加班猝死的.但是,不改吧,也找不到原因,那么,就硬著頭皮來了.全組熬夜加班,改項目.
經(jīng)過一次史詩級的戰(zhàn)役過后(雙十一版本因為IPv6被拒了5次),我們的APP在11月3號審核通過了.謝天謝地.還好趕上了雙十一,沒有死的太慘.
上面啰嗦了一籮筐沒有用的東西,是因為我真的是記憶猶新啊,情不自禁地就說了這么多,寶寶心里實在是苦水太多了,沒有把握好這篇文章的要點,請各位看官見諒.下面說說我們這個2011年就上線的APP關(guān)于IPv6的適配都做了哪些調(diào)整:
1.AFN網(wǎng)絡(luò)請求升級3.0版本.我們這個舊項目里有3種網(wǎng)絡(luò)請求方式:1.基于蘋果原生的Http請求;2.ASI網(wǎng)絡(luò)請求;3.AFN2.0版本網(wǎng)絡(luò)請求.所以我們重新基于AFN3.0版本封裝了一套網(wǎng)絡(luò)請求,替換了之前的所有的網(wǎng)絡(luò)請求.這項改動是最大的,因為網(wǎng)絡(luò)請求不單單是更換,換完之后還得測試有木有bug.
2.升級友盟,環(huán)信,聽云,QQ,微信,支付寶,微博等第三方SDK,在升級之前跟對應(yīng)的公司咨詢,你們最新的SDK支持不支持IPv6.這也是個不大不小的工作,因為升級過后的這些第三方SDK,有的已經(jīng)把里面好多方法都改了(包括方法的名字,參數(shù)).升級過了,重新反復(fù)測試,看看之前的業(yè)務(wù)邏輯還能不能走通,如果不能,還得找產(chǎn)品撕逼,修改下業(yè)務(wù)邏輯.
3.第三方網(wǎng)絡(luò)狀態(tài)監(jiān)測Reachability更換蘋果原生的Reachability.這一點是最最坑爹的,我們項目檢測網(wǎng)絡(luò)狀態(tài)沒有用AFN自帶的方法,原因就不說了,用到的是第三方Reachability.原本以為升級一下,就搞定了 ,誰知道還是被拒,原因還不給說明白,反正就是IPv6審核不過,然后去GitHub上看這個第三方的Reachability介紹,人家開頭就寫了個大大的警告:WARNING there have been reports of apps being rejected when Reachability is used in a framework. The only solution to this so far is to rename the class.大致的意思就是:應(yīng)用程序已經(jīng)有報告時可達(dá)一個框架用于被拒絕。解決這個問題的唯一解決方案到目前為止是重命名類琢锋。然后我們就按照這個改了下,重新提交AppStore審核,還是被拒.媽蛋,真要被玩死了.罵了大概1個小時街后,還得冷靜下來繼續(xù)找問題.最后再蘋果的官方文檔里找了一個也叫Reachability的東西,用自己英語4級的水平看過之后,發(fā)現(xiàn)我們的蘋果也出了一個一模一樣的Reachability(感覺蘋果也在借鑒江湖上的一些'靈丹妙藥'來給自己治病,這一點從文檔注釋VV又加以了驗證),我這里說的一樣只是名字上的一樣,但是里面的內(nèi)容90%的也一樣,剩下10%的不同,我們的APP就審核不過.下圖才是蘋果的"正房",其他的都是"小三"!
最后:
關(guān)于IPv6網(wǎng)上的資料整理:ipv6審核被拒絕的解決方案
關(guān)于IPv6的審核,我們的后臺服務(wù)器也做了點相應(yīng)的調(diào)整,建了一個專門的IPv6的通道.這一塊我不怎么了解,但是我們知道服務(wù)器做了這個調(diào)整.
Https將在2017.01.01正式推行,關(guān)于這一塊,我們的APP換成AFN3.0之后,經(jīng)測試之前的數(shù)據(jù)加載慢,加載不出來的問題也沒有了,所以有這一塊的需求的記得也換一下.
如果當(dāng)初我能重視我那個好朋友說的話,可能就不需要過這段提心吊膽的日子了,所以一定要擺正好自己的心態(tài),不要太過狂妄自大.