溫馨提示
本地搭建CodeServer,可以查看我另外一篇文章:https://blog.csdn.net/he_wen_jian/article/details/91415296
1:首先在測試CodePush熱更新前一定不要用模擬器測試。
2:react-native run-android 手機首次加載頁面後關閉Nodejs。
3:1.0.0無法更新到1.0.1,只能同一個版本上更新(個人測試結果不知道具體是不是這樣)
# 命令彙總
$code-push app list 可以查看創建好的APP
$code-push deployment ls <APP_NAME> -k 查看Deployment Key
$code-push app add <app_Name_android> android react-native 在賬號裏面添加一個新的app
$code-push app add <app_Name_ios> ios react-native 在賬號裏面添加一個新的app
$code-push app remove <app_Name> 或者 rm 在賬號裏移除一個app
$code-push app rename 重命名一個存在app
$code-push app list 或則 ls 列出賬號下面的所有app
$code-push app transfer 把app的所有權轉移到另外一個賬號
實操:
1:安裝 CodePush CLI:
npm install -g code-push-cli
2:創建賬號
這將會啓動瀏覽器,要求驗證你的Github或微軟帳號。一旦驗證成功,它將創建一個CodePush帳號跟你的Github或MSA相連,並生成一個訪問密鑰(Access Key),你可以拷貝/粘貼到CLI以便登錄。
注意:註冊成功後,你就已經自動登錄了。所以除非你明確登出了,否則你不需要在此機器上再次登錄。
code-push register
3:添加應用
創建應用一般使用-Android -IOS,區分連個不同平臺,方便於更顯管理
code-push app add MyApp-Android
code-push app add MyApp-IOS
可用通過:Code-Push app ls 查看所用應用
4:RN項目安裝:react-native-code-push
npm install --save react-native-code-push
5:RN項目添加綁定:
react-native link react-native-code-pus
根據提示輸入測試環境的Staging對應的Key
6:通過調試模式安裝的應用爲“Staging”,通過gradlew assembleRelease打包的應用爲“Production”.
7:RN項目代碼:
在App.js中加入該代碼,如果使用Production環境,請更換android/app/src/main/res/values/strings.xml中的:
moduleConfig
import CodePush from "react-native-code-push";
syncImmediate() {
CodePush.sync(
{ installMode: CodePush.InstallMode.IMMEDIATE, updateDialog: true,
updateDialog : {
//是否顯示更新描述
appendReleaseDescription : true ,
//更新描述的前綴。 默認爲"Description"
// descriptionPrefix : <Text style={{color:'white'}}>更新內容</Text>,
// descriptionPrefix : "\n \nDescrption:\n1、This is descriptionPre1123\n2、descriptionPre2\n\n" ,
descriptionPrefix : "\n \n更新內容:\n" ,
//強制更新按鈕文字,默認爲continue
mandatoryContinueButtonLabel : "立即更新" ,
//強制更新時的信息. 默認爲"An update is available that must be installed."
mandatoryUpdateMessage : "必須更新後才能使用",
// mandatoryUpdateMessage : "An update is available that must be installed.", //"必須更新後才能使用" ,
//非強制更新時,按鈕文字,默認爲"ignore"
optionalIgnoreButtonLabel : '稍後' ,
//非強制更新時,確認按鈕文字. 默認爲"Install"
optionalInstallButtonLabel : '極速更新' ,
//非強制更新時,檢查到更新的消息文本
optionalUpdateMessage : '有新版本了,是否更新?' ,
//Alert窗口的標題
title : '更新提示'
} ,
},
this.codePushStatusDidChange.bind(this),
this.codePushDownloadDidProgress.bind(this)
);
}
// 監聽更新狀態
codePushStatusDidChange(syncStatus) {
switch(syncStatus) {
case CodePush.SyncStatus.CHECKING_FOR_UPDATE:
this.setState({ syncMessage: "Checking for update." });
break;
case CodePush.SyncStatus.DOWNLOADING_PACKAGE:
this.setState({ syncMessage: "Downloading package." });
break;
case CodePush.SyncStatus.AWAITING_USER_ACTION:
this.setState({ syncMessage: "Awaiting user action." });
break;
case CodePush.SyncStatus.INSTALLING_UPDATE:
this.setState({ syncMessage: "Installing update." });
break;
case CodePush.SyncStatus.UP_TO_DATE:
this.setState({ syncMessage: "App up to date.", progress: false });
break;
case CodePush.SyncStatus.UPDATE_IGNORED:
this.setState({ syncMessage: "Update cancelled by user.", progress: false });
break;
case CodePush.SyncStatus.UPDATE_INSTALLED:
this.setState({ syncMessage: "Update installed and will be applied on restart.", progress: false });
break;
case CodePush.SyncStatus.UNKNOWN_ERROR:
this.setState({ syncMessage: "An unknown error occurred.", progress: false });
break;
}
}
codePushDownloadDidProgress(progress) {
}
8:修改版本號爲三位數如:1.0.0,(創建項目時默認爲1.0)
9:推送更新:
Production:
code-push release-react xiaoqi-android android -t 1.0.2 -d Production --description "1.加載進度 。"
Staging:
code-push release-react xiaoqi-android android -t 1.0.2 -d Staging --description "1.加載進度 。"
10:查詢推送列表:
code-push deployment history xiaoqi-android Production