基于capacitorjs的APP前端資源本地化

最近做了安卓app前端資源本地化的工作,下面說明一下具體實現(xiàn)的一些點。

概覽

最近做了安卓app前端資源本地化的工作,下面說明一下具體實現(xiàn)的一些點珊拼。

概覽

對比

如圖所示,原本我們的app基本上是一個純套殼的app流炕,單webview嵌入了一個線上的h5頁面澎现,App提供視圖渲染和功能拓展(拍照,定位等)每辟,只要去更新線上的前端代碼就可以更新當前app了剑辫,但是這樣會有一個弊端,殺掉程序后渠欺,每次進入app都會重新向server發(fā)送請求來加載資源妹蔽,盡管目前我們的前端包不算大,在網(wǎng)速一般的時候不可避免的會出現(xiàn)白屏的情況挠将。如果內(nèi)嵌的前端資源有大量圖片胳岂,這種情況會更加糟糕。

改造后舔稀,前端資源會緩存在本地乳丰,webview的地址也指向了本地的server,這樣就可以解決上面說的痛點内贮,但與此同時又帶來了新的問題产园。下面梳理一下這次優(yōu)化所碰到的坑。

坑點

我們所使用的跨平臺框架是capacitorjs夜郁,官方文檔在這里什燕。

  1. 網(wǎng)絡請求,之前前端資源和服務器上的接口屬于同域竞端,所以不會出現(xiàn)跨域問題屎即,可是現(xiàn)在頁面實際運行的地址是localhost,那么要么后端去做一下跨域處理事富,這顯然不合理剑勾。所以最好的方式是走安卓端請求接口的方式,安卓請求接口是比http更底層的tcp赵颅,不存在跨域虽另。

在api的http部分,給了一些示例饺谬,所以我們要做的就是把目前的訪問接口方式批量改成這種嗎捂刺?早先我也是這么認為的谣拣,我們用的ajax請求庫是axios,那么動手將兩種風格統(tǒng)一族展,手動去實現(xiàn)攔截器等功能也是一個不小的工作森缠。

后面發(fā)現(xiàn),只要引入這個庫仪缸,請求似乎都走了native贵涵,不難想象出有針對xhr做全局攔截處理的代碼。示例是這樣寫的

import { CapacitorHttp } from '@capacitor/core';

然而如果想當然以為這一部分的代碼就在這里恰画,那就錯了宾茂,翻看源碼后得知這一部分的邏輯在native-bridge.js里

所以如果想讓網(wǎng)絡請求正常工作,需要安卓判斷是否有CapacitorHttp相關的處理(低版本的capacitor并沒有這些插件)拴还,有了插件也要檢查native-bridge是否有全局劫持xhr的代碼跨晴。

即使做了這些,有些特殊的請求還是要手動兼容片林,目前發(fā)現(xiàn)上傳文件接口就會出現(xiàn)(本質是multipart和json兩種數(shù)據(jù)類型的原因)端盆。

  1. 熱更新,之前說了直接使用線上地址的好處是隨時發(fā)版费封,內(nèi)容可變焕妙,那如果做本地化也想要這樣的效果需要怎么做呢,這個capacitor實在是過于小眾弓摘,比較麻煩焚鹊。最終我找到的方案就是cap-go的插件,具體使用的方法文檔說明的還算清晰衣盾,不再贅述寺旺。需要注意的是壓縮包不能包括根目錄(選取多文件壓縮多項)

  2. 自動化腳本問題爷抓,我們沒有一個完整的CI工具势决,所以之前上傳前端資源使用的是我基于nodejs寫的腳本,根據(jù)不同環(huán)境打包蓝撇,然后通過sftp協(xié)議傳到服務端果复,實際寫過nodejs腳本的人應該知道,設計之初的nodejs包含大量的回調(diào)語法渤昌,和現(xiàn)在promise風格的API是格格不入的虽抄。所以這次我基于zxjs進行了優(yōu)化,整體流程更加直觀易懂独柑。

腳本上傳文件的時候迈窟,又發(fā)現(xiàn)了新的問題,swagger和postman都能通忌栅,包括本地起的server模擬文件服務也能成功车酣,但是在線上環(huán)境就是無法直接后臺訪問接口上傳,關鍵時候使用了一下apiFox,明白了其中缺失的部分湖员。

axios({
    url:`${baseUrlMap[env]}/management/web/uploadSource`,
    method:'post',
    data:formData,
    headers:formData.getHeaders() // 關鍵語句
})

結論

事實上hybrid App在我們?nèi)粘I钪写嬖诤芏嗥肚模弥Ц秾毰e例,有時需要從應用市場重新下載娘摔,有時只需要在頁面上點擊一下更新資源窄坦,這個就是app熱更新。只要知道原理凳寺,調(diào)試的時候就不會毫無頭緒鸭津。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市读第,隨后出現(xiàn)的幾起案子曙博,更是在濱河造成了極大的恐慌,老刑警劉巖怜瞒,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件父泳,死亡現(xiàn)場離奇詭異,居然都是意外死亡吴汪,警方通過查閱死者的電腦和手機惠窄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漾橙,“玉大人杆融,你說我怎么就攤上這事∷耍” “怎么了脾歇?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淘捡。 經(jīng)常有香客問我藕各,道長,這世上最難降的妖魔是什么焦除? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任激况,我火速辦了婚禮,結果婚禮上膘魄,老公的妹妹穿的比我還像新娘乌逐。我一直安慰自己,他們只是感情好创葡,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布浙踢。 她就那樣靜靜地躺著,像睡著了一般灿渴。 火紅的嫁衣襯著肌膚如雪洛波。 梳的紋絲不亂的頭發(fā)上呐芥,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音奋岁,去河邊找鬼思瘟。 笑死,一個胖子當著我的面吹牛闻伶,可吹牛的內(nèi)容都是我干的滨攻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蓝翰,長吁一口氣:“原來是場噩夢啊……” “哼光绕!你這毒婦竟也來了?” 一聲冷哼從身側響起畜份,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤诞帐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后爆雹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體停蕉,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年钙态,在試婚紗的時候發(fā)現(xiàn)自己被綠了慧起。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡册倒,死狀恐怖蚓挤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驻子,我是刑警寧澤灿意,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站崇呵,受9級特大地震影響缤剧,放射性物質發(fā)生泄漏。R本人自食惡果不足惜演熟,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一鞭执、第九天 我趴在偏房一處隱蔽的房頂上張望司顿。 院中可真熱鬧芒粹,春花似錦、人聲如沸大溜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钦奋。三九已至座云,卻和暖如春疙赠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朦拖。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工圃阳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人璧帝。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓捍岳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親睬隶。 傳聞我的和親對象是個殘疾皇子锣夹,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容