React-native集成CodePush热更新android篇(附带ios版地址) --------小白的天堂

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到终端回车即可
React-native集成CodePush热更新android篇(附带ios版地址) --------小白的天堂_第1张图片
这时候在终端会出现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:开发版使用
React-native集成CodePush热更新android篇(附带ios版地址) --------小白的天堂_第2张图片
此时我们的应用已经在codepush服务器创建。

5.查看创建的应用:

code-push app list

在这里插入图片描述
我们刚刚只创建了一个应用,所以只有一个。
到此codepush服务配置完成!!!

React-native 集成codepush
1.首先确保rn项目能正常启动

2.执行yarn add react-native-code-push安装codepush库(根据自己RN版本来安装codepush库)
React-native集成CodePush热更新android篇(附带ios版地址) --------小白的天堂_第3张图片
3.rn0.6版本之前需要执行:

react-native link react-native-code-push;

rn0.6之后的版本会自动link项目,不需要执行此命令
此时在MainApplication.java中多了一条:
在这里插入图片描述
修改string.xml,添加:

your app key

React-native集成CodePush热更新android篇(附带ios版地址) --------小白的天堂_第4张图片
如果此处你忘记的你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

React-native集成CodePush热更新android篇(附带ios版地址) --------小白的天堂_第5张图片
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		
#清除历史部署记录

你可能感兴趣的:(react-native,CodePush,热更新)