React-native集成CodePush熱更新android篇
RN版本:0.59.5
react-native-code-push:6.2.0
開始集成:
註冊codepush:
1.安裝codepush cli(類似rn的腳手架,全局只需要安裝一次)
npm install -g code-push-cli
查看安裝版本
2.註冊codepush賬號(此操作命令也是全局只需要執行一次即可)
code-push register
注意:當執行完上面的命令後,會自動打開一個授權網頁,選擇一個你有賬號的登錄即可,這裏我們使用github登錄
3.登錄成功後會在網頁上出現一個key,複製這個key到終端回車即可
這時候在終端會出現Successfully的提示,表示註冊成功,並自動登錄
此時可以使用code-push login來檢驗一下當前是否登錄:
此提示表示你已經登錄了,到此恭喜你創建賬號成功!!!
4.在codepush服務器註冊app(這裏android和ios是有區別的,需要分別註冊不同應用,生成不同的key,此處以android爲例)
android:code-push app add <your app name> android react-native
ios:code-push app add <your app name> ios react-native
此時會生成兩個key(用於後期集成rn中):Production:正式版使用;Staging:開發版使用
此時我們的應用已經在codepush服務器創建。
5.查看創建的應用:
code-push app list
我們剛剛只創建了一個應用,所以只有一個。
到此codepush服務配置完成!!!
React-native 集成codepush
1.首先確保rn項目能正常啓動
2.執行yarn add react-native-code-push安裝codepush庫(根據自己RN版本來安裝codepush庫)
3.rn0.6版本之前需要執行:
react-native link react-native-code-push;
rn0.6之後的版本會自動link項目,不需要執行此命令
此時在MainApplication.java中多了一條:
修改string.xml,添加:
<string moduleConfig="true" name="CodePushDeploymentKey">your app key</string>
如果此處你忘記的你key,不要急,我們可以通過codepush命令在查看具體環境的key:
code-push deployment ls <your app name> -k
然後把Staging 的key 複製過去即可
4.啓動項目,看下是否報錯,如果沒問題說明集成成功
5.在項目app.js中引入codepush
import CodePush from "react-native-code-push";
let codePushOptions = {
//設置檢查更新的頻率
//ON_APP_RESUME APP恢復到前臺的時候
//ON_APP_START APP開啓的時候
//MANUAL 手動檢查
checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME
};
然後在結尾添加:
App = CodePush(codePushOptions )(App)
export default App
這樣codepush集成完成,當然,這樣集成的更新爲靜默更新,表現爲啓動app後自動檢查版本,如果有新版本會下載,在下次啓動app的時候完成更新,自定義app更新下邊有講。
6.修改android/app/build.gradle中versionName爲三位數(例:1.0.0),然後打包app安裝到手機(當然debug模式也可以,不過這樣不能自動安裝bundle文件,沒法明顯看出有沒有更新,只能通過codepush來查看是否已安裝更新)
7.生成bundle文件:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
注:android/app/src/main/assets/:爲bundle文件輸出目錄
8.上傳bundle文件到codepush服務器
code-push release-react <your app name> <平臺(android,ios)> --t <剛剛修改的versionName> --des <本次更新說明>
注:此處執行的命令是Staging環境的,如果要發佈Production環境,請先配置Production環境的key,然後執行以下命令:
code-push release-react <項目名稱 <項目平臺(android,ios)> --t <當前項目版本號(三位數)> --dev false --d Production --des <項目更新描述> --m true
其中–m true是強制更新,表現爲:進入app後,下載bundle文件,下載完成後立刻自動重啓更新,會明顯感覺到app閃了一下,如果改爲–m false,會在下次啓動app後更新
9.查看上傳的bundle詳情:
Prodeuction環境:code-push deployment history wenlvshe Production
Staging環境:code-push deployment history wenlvshe Staging
Lable:序號
Release Time:上傳時間
App Version:當前app更新版本
Mandatory:是否強制更新
Description:更新描述
Install Metrics:更新進度
Active:當前正在更新的
Total:更新完的設備數
Rollbacks: 更新出錯時出現,設備回滾數量
Active初始爲0%,total爲0,圖上狀態爲有一個設備已更新完成
10.修改更新提示(以上爲靜默更新的配置,如果要實現有提示框的項目按一下方法配置)
(1)在app.js中引入codepush的下方加入:
import CodePush from "react-native-code-push";
let codePushOptions = {
//設置檢查更新的頻率
//ON_APP_RESUME APP恢復到前臺的時候
//ON_APP_START APP開啓的時候
//MANUAL 手動檢查
checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME
};
(2)在componentWillMount中加入:
CodePush.disallowRestart();//禁止重啓
this.syncImmediate(); //開始檢查更新
(3)在componentWillMount中加入
componentDidMount() {
CodePush.allowRestart();//在加載完了,允許重啓
}
(4) 實現syncImmediate方法:
syncImmediate = () => {
CodePush.sync({
//安裝模式
//ON_NEXT_RESUME 下次恢復到前臺時
//ON_NEXT_RESTART 下一次重啓時
//IMMEDIATE 馬上更新
installMode: CodePush.InstallMode.IMMEDIATE,
//對話框
updateDialog: {
//強制更新按鈕文字,默認爲continue
mandatoryContinueButtonLabel: "立即更新",
//強制更新時的信息. 默認爲"An update is available that must be installed."
mandatoryUpdateMessage: "必須更新後才能使用",
//是否顯示更新描述
appendReleaseDescription: false,
//更新描述的前綴。 默認爲"Description" -------
descriptionPrefix: "更新內容:1", //---------
//非強制更新時,按鈕文字,默認爲"ignore"
optionalIgnoreButtonLabel: '暫不更新', //---------
//非強制更新時,確認按鈕文字. 默認爲"Install"
optionalInstallButtonLabel: '後臺更新', //---------
//非強制更新時,檢查到更新的消息文本
optionalUpdateMessage: '有新版本了,是否更新?', //---------
//Alert窗口的標題
title: '更新提示' //------------
},
} ,
);
}
(5)修改App = CodePush(App)爲
App = CodePush(codePushOptions)(App)
重新打bundle文件上傳即可看到更新提示框
到此react-native集成CodePush android端已全部完成
ios端集成請看下一篇:
https://blog.csdn.net/qq_41457238/article/details/106187575
*下邊分享一些CodePush常用命令:
npm install -g code-push-cli #安裝codepush
code-push register #註冊賬號
code-push login #登陸
code-push logout #註銷
code-push app add <appName> <platform> <language> #添加項目
code-push release-react <appName> <platform> #發佈更新
code-push app remove <appName> #刪除項目
code-push app list #列出賬號下的所有項目
code-push access-key ls #顯示登陸的token
code-push access-key rm <accessKey> #刪除某個access-key
code-push collaborator add <appName> <account> #添加協作人員
code-push deployment add <appName> <deploymentName> #部署一個環境
code-push deployment rm <appName> #刪除部署
code-push release-react <項目名稱> <安裝平臺(android,ios)> --t <當前項目版本號(三位數)> --des <項目更新描述> #Staging環境部署
code-push release-react <項目名稱> <項目平臺(android,ios)> --t <當前項目版本號(三位數)> --dev false --d Production --des <項目更新描述> --m true #Production環境部署
code-push deployment ls <appName> #列出應用的部署
code-push deployment ls <appName> -k #查詢部署環境的key
code-push deployment history <appName> <deploymentNmae> #查看部署的歷史版本信息
code-push deployment rename <appName> <currentDeploymentName> <newDeploymentName> #重命名一個部署
code-push deployment clear <appName> Production or Staging
#清除歷史部署記錄