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 android react-native
ios:code-push app add 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,添加:
your app key
如果此处你忘记的你key,不要急,我们可以通过codepush命令在查看具体环境的key:
code-push deployment ls -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 <平台(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 #添加项目
code-push release-react #发布更新
code-push app remove #删除项目
code-push app list #列出账号下的所有项目
code-push access-key ls #显示登陆的token
code-push access-key rm #删除某个access-key
code-push collaborator add #添加协作人员
code-push deployment add #部署一个环境
code-push deployment rm #删除部署
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 #列出应用的部署
code-push deployment ls -k #查询部署环境的key
code-push deployment history #查看部署的历史版本信息
code-push deployment rename #重命名一个部署
code-push deployment clear Production or Staging
#清除历史部署记录