此文檔是在以前公司使用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)載請注明出處咱扣。