安装
- 输入下面命令安装code-push
npm install -g code-push-cli
1、使用微软服务器
打开命令提示符
- 进行注册登陆
code-push register
- 在浏览器跳转的注册界面让选择授权登录,获取access key,在终端
输入获取key,进行登陆
code-push login
2、使用自己部署的服务器
打开命令提示符
进行注册登陆
code-push login http://xxx.xxx.xxx.xxx:3000
- 在浏览器跳转的注册界面让选择授权登录,获取token,在终端获取token,进行登陆
3、注册app
在项目目录下执行下面命令
//注册Android
code-push app add 应用名 android react-native
//注册iOS
code-push app add 应用名 ios react-native
执行命令后会返回一套deployment key,环境分为Production和Staging,把该key在客户端中集成
4、安装react-native-code-push插件
npm install --save react-native-code-push
回到项目目录下,进行关联
react-native link react-native-code-push
此命令将会自动在anroid文件中添加好设置。
终端会提示让输入deployment key,只需将deployment Staging key输入即可
5、查看APP的key命令
code-push deployment ls appName -k
6、查看ap下所有应用
code-push app list
配置
Android
在app/build.gradle配置
apply from: "../../node_modules/react-native/react.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
buildTypes {
release {
buildConfigField "String", "codepushkey", '"填写Production key"'
}
debug {
buildConfigField "String", "codepushkey", '"填写Staging key"'
}
}
dependencies {
compile project(':react-native-code-push')
}
修改版本号,把versionName属性改成 三位,比如要修改成1.0.0
versionName "1.0.1"
在android/settings.gradle配置
include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')
在MyApplication配置
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new CodePush(BuildConfig.codepushkey, MainApplication.this, BuildConfig.DEBUG,"http://192.168.0.5:8080")
);
}
ISO
- 在Xcode的项目导航视图中的PROJECT下选择项目, 选择Info页签——Configurations——单击 + 按钮——选择Duplicate "Release Configaration , 输入Staging。Use行选release
- 在PROJECT和TARGET下选择build Settings页签中单击 + 按钮然后选择添加User-Defined Setting,然后输入
CODEPUSH_KEY,然后填入deployment key。Reease和Staging填写Production的key,Debug填Staging的key - 打开 Info.plist文件,在CodePushDeploymentKey中输入$(CODEPUSH_KEY),名字要和上面Setting的一致。
- 添加CodePushServerURL(string),把服务器地址写上(如http://192.168.0.5:8080)
- 修改Bundle versions string,short 为三位数
- 配置运行版本,Product中run和analyze选择release
- Capablitie中的Push Notification打开
打包,集成热更新
打包
执行下面命令打包,打包后会自动把文件上传到codepush服务器上
code-push release-react 注册的应用名 android --t 1.0.1 --dev false --d Staging --des"一些小修改" --m true
说明
- android:平台 Android/ios
- t :要对那个版本进行热更新这里是对1.0.1进行更新
- dev:是否是开发者模式
- d:staging/production
- des:更新描述
- m:是否强制升级
集成
检查更新的位置根据项目来定
codePush.checkForUpdate().then((update) => {
if (update) {
codePush.sync(
{
ignoreFailedUpdates : false,
mandatoryInstallMode: codePush.InstallMode.IMMEDIATE,
},
(status) => {
switch (status) {
case codePush.SyncStatus.CHECKING_FOR_UPDATE:
this.setState({ syncMessage: "检查更新!" });
break;
case codePush.SyncStatus.DOWNLOADING_PACKAGE:
this.setState({ syncMessage: "正常下载安装包!" });
break;
case codePush.SyncStatus.AWAITING_USER_ACTION:
this.setState({ syncMessage: "等待用户操作!" });
break;
case codePush.SyncStatus.INSTALLING_UPDATE:
this.setState({ syncMessage: "正在安装...,请等待!" });
break;
case codePush.SyncStatus.UP_TO_DATE:
this.setState({ syncMessage: "已经是最新版本了!", progress: false });
break;
case codePush.SyncStatus.UPDATE_IGNORED:
this.setState({ syncMessage: "更新取消!", progress: false });
break;
case codePush.SyncStatus.UPDATE_INSTALLED:{
this.setState({ syncMessage: "新的版本已经安装完成,请重新登录!", progress: false });
codePush.restartApp();
break;
}
case codePush.SyncStatus.UNKNOWN_ERROR:
this.setState({ syncMessage: "更新发生错误,请重新启动程序!", progress: false });
break;
}
},
(progress) => {
this.setState({ progress });
}
);
}
else {
console.log('已经是最新版本');
this.init();
}
})