關(guān)于上蘋果的H5游戲上線概況:
? ? ? 目前H5加殼游戲上線基本是靠運(yùn)氣上線厕倍,純粹的只為了加載H5網(wǎng)頁的殼基本是過不了的瞄勾,一般H5游戲CP都想方設(shè)法的增大包體屁药,但是無用的增大包體會被蘋果檢查出來一般會當(dāng)做混淆2.3處理虑瀑,嚴(yán)重可能封號馆纳,所以很多CP都想把游戲資源(圖片,js,json)等資源放在本地糠亩,通過攔截網(wǎng)頁請求來加載本地資源虐骑。攔截資源遇到的問題:
* ? ?相信大家都在用WKWebview來加載游戲鏈接(WKWebview相比UIWebview的優(yōu)勢就不在這里說了),而我們攔截都是用NSURLProtocol來攔截的(NSURLProtocol是URL Loading System的重要組成部分赎线。它是一個(gè)抽象類廷没。可以攔截網(wǎng)絡(luò)請求垂寥〉呃瑁可以攔截的網(wǎng)絡(luò)請求包括NSURLSession,NSURLConnection以及UIWebvIew),而NSURLProtocol來攔截WKWebView會導(dǎo)致Post請求被掛起滞项,而被掛起基本是蘋果針對WKWebview性能優(yōu)化而舍棄的東西狭归,不過我們合理的攔截其實(shí)可以避免。目前網(wǎng)上說的解決方案:
? ? 目前網(wǎng)上說的
? (1)自定義Scheme:針對于get請求有效文判,post請求是沒有作用的过椎!
??(2)還有就是把post請求body放在httpHead中,請求頭的參數(shù)大小是有限制的
* ? ? ?圖片攔截也會出現(xiàn)一些圖片加載不出來的情況戏仓,究其原因是因?yàn)闆]有請求頭疚宇,所以涉及到自定義請求頭的問題,下面一步一步講解
我們現(xiàn)在針對于上述2種攔截問題以2種攔截方式來進(jìn)行赏殃。
一:單個(gè)JS的攔截
1.首先你需要先注冊NSURLProtocol
2.你需要?jiǎng)?chuàng)建一個(gè)繼承NSURLProtocol的子類敷待,并實(shí)現(xiàn)NSURLSessionDelegate的代理
3.注冊成功后我們會發(fā)現(xiàn)所有的WebView的請求鏈接都會走+ (BOOL)canInitWithRequest:(NSURLRequest*)request這個(gè)方法,我們在這里設(shè)置攔截規(guī)則嗓奢。
4.當(dāng)設(shè)置了攔截規(guī)則后滿足該規(guī)則后會走+ (NSURLRequest*)canonicalRequestForRequest:(NSURLRequest*)request
此時(shí)我們在這里進(jìn)行本地js的替換讼撒。并及時(shí)注銷?NSURLProtocol和攔截方法
tip:攔截是需要同時(shí)注銷這2種方式
二:大量資源的本地替換
圖片資源的攔截一般有以下特征:
1.攔截資源很多,針對游戲所以資源進(jìn)行攔截的話會有很多的攔截
2.圖片需要去設(shè)置緩存
NSURLProtocol攔截步驟:
1.圖片攔截我們通過一個(gè)Plist文件進(jìn)行統(tǒng)一管理股耽,這種管理方式是通過本地圖片名字為值根盒,網(wǎng)絡(luò)圖片地址為鍵的對應(yīng)方式,當(dāng)檢測到key是進(jìn)行攔截物蝙。
2.而我么你的替換是在在startLoading中加載炎滞,實(shí)現(xiàn)思路:將需要替換的地址重新拼接response返回,再響應(yīng)本地資源诬乞。我們需要自定義請求頭的參數(shù)册赛,關(guān)鍵代碼如下:
支付和替換具體代碼因公司在用不貼代碼啦,具體可以添加QQ:969661780
或者微信:
前不久用本猿的殼上線H5游戲:
https://apps.apple.com/cn/app/沙城天下-沙蟲襲擊/id1461700547#?platform=iphone