1. 程式人生 > >ios稽核被拒、提示ipv6、實際是阿里雲OSS的問題

ios稽核被拒、提示ipv6、實際是阿里雲OSS的問題

背景:

被ios開發告知因為ipv6問題app稽核被拒,首先是想到把阿里雲的ECS伺服器上配置上ipv6,但感覺不應該是伺服器的問題,國內運營商的網路都不支援ipv6,伺服器支援也沒用啊!於是諮詢了下阿里雲的客服,客服回答說:



大體是說,如果是客戶端app,只要使用的是高階的網路api比如:NSURLSession和CFNetwork框架,然後使用的是域名來訪問網路,那麼不需要做任何改動。

貌似確實沒提到服務端的任何事情,接著往下看:


大體是說,客戶端向DNS64的伺服器發起dns查詢,希望能獲得一個ipv6地址。如果DNS64伺服器能夠找到域名對應的ipv6地址就直接返回給客戶端,如果沒找到,DNS64伺服器會去獲取ipv4的地址,然後把ipv4的地址合成ipv6的地址,然後再回傳給客戶端。這樣的話,客戶端就總是能夠獲取到ipv6地址了。

也就是說,伺服器支不支援ipv6都沒關係的,DNS64伺服器能自動把ipv4地址合成ipv6地址。

接著往下看:


被拒的原因可能是:

(1)ip地址硬編碼

(2)配置檔案中有ip地址

(3)很多app都會直連ip地址來做做網路連通性檢查

(4)使用了底層的ipv4的網路api,比如:inet_addr(),inet_aton(),inet_lnaof(),inet_makeaddr(),inet_netof(),inet_network(),inet_ntoa(),inet_ntoa_r(),bindresvport(),getipv4sourcefilter(),setipv4sourcefilter()

(5)使用短地址結構來儲存網路地址,比如:uint32_t, in_addr, and sockaddr_in

也就是說,只要做到了以上幾點,基本上是沒問題的。

然後網上也有說,NSURLConnection導致稽核不通過的,NSURLConnection從ios9已經被廢棄掉了,不管是不是因為這個原因,都不應該在程式碼中使用了。

綜上所述:

(1)ipv6被拒問題跟伺服器、網路沒有半毛錢關係

(2)ipv6問題主要還是客戶端ip地址硬編碼、底層api使用不當導致。

-----------------------------------------------------------------------------------------------------------------------

因為蘋果給的截圖是音訊播放介面,說是沒有聲音,最終判斷應該是無法獲取阿里雲oss上的音訊檔案導致。因此,我們弄了一個開關,客戶端的請求先到我們的伺服器,伺服器再去請求阿里雲oss,通過伺服器中轉一下,伺服器跟阿里雲是通的啊,按道理說應該是可以的。等稽核通過以後,再把開關開啟就可以了。

很悲劇的是,這樣改了以後,提交到應用商店,又被拒了!

實在沒轍了,只能把測試賬號裡面涉及到的音訊檔案放到了伺服器上的本地目錄,然後就稽核通過了!

實在解釋不通啊!

TMD阿里雲OSS,必須換七牛!