ReactNative使用CodePush熱更新文檔(Android篇)

此文檔是在以前公司使用RN時(shí)(安卓同事)總結(jié)的,現(xiàn)在放上來供需要的同學(xué)參考苗膝。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?React Native熱更新(CodePush

一殃恒、CodePush簡介

CodePush是微軟提供的一套用于熱更新React Native和Cordova應(yīng)用的服務(wù)。

CodePush是提供給React Native和Cordova開發(fā)者直接部署移動應(yīng)用更新給用戶設(shè)備的云服務(wù)辱揭。CodePush作為一個(gè)中央倉庫离唐,開發(fā)者可以推送更新(JS, HTML, CSS and images),應(yīng)用可以從客戶端SDK里面查詢更新问窃。CodePush可以讓應(yīng)用有更多的可確定性亥鬓,也可以讓你直接接觸用戶群。在修復(fù)一些小問題和添加新特性的時(shí)候域庇,不需要經(jīng)過二進(jìn)制打包嵌戈,可以直接推送代碼進(jìn)行實(shí)時(shí)更新。

二听皿、操作步驟

1)安裝CodePush CLI

在終端輸入npm install -g code-push-cli熟呛,就可以安裝了。

安裝完畢后尉姨,輸入code-push -v查看版本庵朝,如看到版本代表成功。

2創(chuàng)建一個(gè)CodePush賬號

在終端輸入code-push register,會打開如下注冊頁面讓你選擇授權(quán)賬號九府。

授權(quán)通過之后椎瘟,CodePush會告訴你“access key”,復(fù)制此key到終端即可完成注冊昔逗。

然后終端輸入code-push login進(jìn)行登陸降传,登陸成功后,你的session文件將會寫在/Users/用戶名/.code-push.config勾怒。

3在CodePush服務(wù)器注冊app

為了讓CodePush服務(wù)器知道你的app,我們需要向它注冊app: 在終端輸入code-push app add

即可完成注冊

4

1.Android集成CodePush SDK

下面我們通過如下步驟在Android項(xiàng)目中集成CodePush声旺。

第一步:在項(xiàng)目中安裝react-native插件笔链,終端進(jìn)入你的項(xiàng)目根目錄然后運(yùn)行npminstall --save react-native-code-push

第二步:在Anroid Project中安裝插件。

CodePush提供了兩種方式:RNPM和Manual腮猖,本次演示所使用的是RNPM鉴扫。

運(yùn)行npm

i -g rnpm,來安裝RNPM澈缺。

第三步: 運(yùn)行rnpm link react-native-code-push坪创。這條命令將會自動幫我們在anroid文件中添加好設(shè)置。

第四步: 如果link成功姐赡,此步驟可以忽略莱预,查看build.gradle文件中是否有如下配置,如果沒有需要在android/app/build.gradle文件里面添如下代碼:

第五步:運(yùn)行code-push deployment ls

獲取 部署秘鑰项滑。默認(rèn)的部署名是staging依沮,所以 部署秘鑰(deployment key) 就是staging。

第六步: 添加配置枪狂。當(dāng)APP啟動時(shí)我們需要讓app向CodePush咨詢JS bundle的所在位置危喉,這樣CodePush就可以控制版本。更新MainApplication.java文件:

第七步:修改versionName州疾。

在android/app/build.gradle中有個(gè)android.defaultConfig.versionName屬性辜限,我們需要把 應(yīng)用版本改成1.0.0(默認(rèn)是1.0,但是codepush需要三位數(shù))严蓖。

至此Code Push for Android的SDK已經(jīng)集成完成薄嫡。

2.iOS集成CodePush SDK

第一步 安裝CodePush

SDK到node_modules文件

在終端cd到項(xiàng)目根目錄,執(zhí)行一下命令行:

npm install --save react-native-code-push@latest安裝react-native-code-push模塊;

第二步 利用cocoaPod將CodePush集成到項(xiàng)目

1>.在podfile文件中輸入:pod'CodePush',:path => '../node_modules/react-native-code-push'然后終端cd到ios項(xiàng)目根目錄執(zhí)行pod install

2>打開項(xiàng)目在BuildPhases->Link

Binary With Libraries中點(diǎn)擊”+”添加libCodePush.a, libz.tbd

第三步native代碼配置

在RN View承載controller中導(dǎo)入SDK:#import

并添加如下代碼

#if DEBUG

jsCodeLocation=[[NSBundlemainBundle] URLForResource:@"main"withExtension:@"jsbundle"];

#else

jsCodeLocation =[CodePush bundleURL];

#endif

3>為了讓CodePush運(yùn)行的時(shí)候知道需要更新哪些應(yīng)用,打開項(xiàng)目的Info.plist文件添加一個(gè)新的鍵CodePushDeploymentKey谈飒,值就是你配置的讓app連接的服務(wù)岂座。

查看鍵值的命令:code-push deployment ls您的應(yīng)用名–k,終端顯示如下圖

測試版填寫Staging Deployment key下的鍵值杭措;正式版填寫Production

Deployment key下的鍵值费什。

三、CodePush更新

設(shè)置更新策略

最簡單的方式是在根component中進(jìn)行上述策略控制。

1>.在js中加載CodePush模塊:import

codePush from 'react-native-code-push'

2>.在componentDidMount中調(diào)用sync方法鸳址,后臺請求更新codePush.sync()

(1)如果可以進(jìn)行更新瘩蚪,CodePush會在后臺靜默地將更新下載到本地,等待APP下一次啟動的時(shí)候應(yīng)用更新稿黍,以確保用戶看到的是最新版本疹瘦。

(2)如果更新是強(qiáng)制性的,更新文件下載好之后會立即進(jìn)行更新巡球。

(3)如果你期望更及時(shí)的獲得更新言沐,可以在每次APP從后臺進(jìn)入前臺的時(shí)候去主動的檢查更新

生成bundle

android項(xiàng)目根目錄下執(zhí)行:react-native bundle --platform android --devfalse --entry-file index.android.js --bundle-outputandroid/app/src/main/assets/index.android.bundle --assets-destandroid/app/src/main/res/

ios項(xiàng)目根目錄下執(zhí)行react-native bundle

--entry-file index.ios.js --bundle-output ./ios/main.jsbundle --platform ios

--assets-dest ./ios --dev false生成main.jsbundle和assets文件

當(dāng)然可以將bundle文件放在其他文件目錄中,不一定是assets目錄酣栈。

打包bundle結(jié)束后险胰,就可以通過CodePush發(fā)布更新了。在終端輸入

code-push

release <應(yīng)用名稱> <對應(yīng)的應(yīng)用版本> --deploymentName更新環(huán)境--description更新描述--mandatory是否強(qiáng)制更新

本例為:

mandatory設(shè)為true強(qiáng)制第一次就重新加載矿筝,mandatory設(shè)為false下次啟動再加載新的bundle

嘗試幾次熱更新后輸入命令code-push deployment history 起便,如下圖所示,可以看到相關(guān)Label的版本窖维、app的版本榆综、是否為強(qiáng)制更新、發(fā)布的作者是誰铸史、描述等信息鼻疮。


測試版發(fā)布成功測試沒有問題后可以通過此方法將bundle發(fā)布到正式版:

code-push promote

當(dāng)發(fā)現(xiàn)新版本bundle使用報(bào)錯(cuò)時(shí)可以使用一下命令進(jìn)行回滾操作:

code-push rollback

四、CodePush的缺點(diǎn)和局限性

(1)服務(wù)器在國外沛贪,在國內(nèi)訪問陋守,網(wǎng)速不是很理想。

(2)其升級服務(wù)器端程序并不開源的利赋,后期微軟會不會對其收費(fèi)還是個(gè)未知數(shù)水评。

(3)不支持增量更新。

五.適用范圍

(1)適用頁面賬戶頁面媚送、消息集合頁面中燥;

(2)顛覆性修改頁面樣式,支持頁面樣式顯示bug熱更新塘偎;支持頁面現(xiàn)有跳轉(zhuǎn)邏輯bug修復(fù)疗涉;

(3)支持添加ReactNative添加新頁面,以及ReactNative現(xiàn)有頁面與新頁面見跳轉(zhuǎn),傳值吟秩。

*轉(zhuǎn)載請注明出處咱扣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涵防,隨后出現(xiàn)的幾起案子闹伪,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偏瓤,死亡現(xiàn)場離奇詭異杀怠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)厅克,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門赔退,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人证舟,你說我怎么就攤上這事硕旗。” “怎么了褪储?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵卵渴,是天一觀的道長。 經(jīng)常有香客問我鲤竹,道長,這世上最難降的妖魔是什么昔榴? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任辛藻,我火速辦了婚禮,結(jié)果婚禮上互订,老公的妹妹穿的比我還像新娘吱肌。我一直安慰自己,他們只是感情好仰禽,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布氮墨。 她就那樣靜靜地躺著,像睡著了一般吐葵。 火紅的嫁衣襯著肌膚如雪规揪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天温峭,我揣著相機(jī)與錄音猛铅,去河邊找鬼。 笑死凤藏,一個(gè)胖子當(dāng)著我的面吹牛奸忽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播揖庄,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼栗菜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蹄梢?” 一聲冷哼從身側(cè)響起疙筹,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后腌歉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛙酪,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年翘盖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桂塞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡馍驯,死狀恐怖阁危,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汰瘫,我是刑警寧澤狂打,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站混弥,受9級特大地震影響趴乡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝗拿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一晾捏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哀托,春花似錦惦辛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗽冒,卻和暖如春呀伙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辛慰。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工区匠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帅腌。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓驰弄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親速客。 傳聞我的和親對象是個(gè)殘疾皇子戚篙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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