CodePush是微软提供的一套用于热更新 React Native 和 Cordova 应用的服务。CodePush 是提供给 React Native 和 Cordova 开发者直接部署移动应用更新给用户设备的云服务。CodePush 作为一个中央仓库,开发者可以推送更新 (JS, HTML, CSS and images),应用可以从客户端 SDK 里面查询更新。CodePush 可以让应用有更多的可确定性,也可以让你直接接触用户群。在修复一些小问题和添加新特性的时候,不需要经过二进制打包,可以直接推送代码进行实时更新。
GitHub
##安装CodePush客户端与注册账号
npm install -g code-push-cli
code-push -v //查看版本
code-push -help //使用帮助
code-push register //会跳出网站,注册账号或授权登陆并得到access key
将获取到的access key黏贴在控制台后会提示Successfully logged-in成功登录。
其他的一些命令:
code-push logout //退出登录
code-push login //登录
code-push access-key ls //列出登陆的token
code-push access-key rm //删除某个 access-key
##往CodePush服务器端添加app
code-push app add [app名称] ios/android react-native
其他的一些命令:
code-push app remove [app名称] //从服务器删除某个app
code-push app rename 当前的名字 新的名字 / /重命名服务器某个app名字
code-push app list //列出服务器账号下的所有app
注意:一个app名字对应两个部署环境:生产环境Production 模拟或演示环境Staging
##Android集成CodePush、打包、发布更新
npm install --save react-native-code-push@latest
其他命令:
//查询部署环境的key也是一个app对应两个:(Deployment Key 和Staging key)
code-push deployment ls app名字 -k
链接原生库
react-native link react-native-code-push
此时会提示你输入deployment key或按回车忽略(如图):
我们新建一个控制台来获取deployment key
此时我们进入项目更路先输入没有带-k的查询部署环境的key,等出来后在输入带-k的查询部署环境的key
code-push deployment ls app名字
code-push deployment ls app名字 -k
调试的话我们用Staging的这个演示环境的key,否则我们用deployment key
copy到我们刚刚提示输入deployment key那个控制台.
使用
基本用法
import codePush from "react-native-code-push";
//这是你的组建
class MyApp extends Component {
}
MyApp = codePush(MyApp); //写在你的class类外面,其中MyApp对应你的组建类名
具体用法查看GitHub中的Plugin Usage
Releasing Updates发布更新
命令: code-push release-react
比如: code-push release-react AppName android
##Multi-Deployment Testing 多环境部署测试的步骤
客户端的回滚机制可以导致服务器端的回滚:code-push rollback
注意:以下多环境测试的4个步骤不需要执行
1.发布更新到Staging环境:code-push release-react
2.运行Staging版app,同步更新,验证其是否正常工作
3.从演示环境推进到生产环境:code-push promote
4.运行Production版app,同步更新,验证其是否正常工作
重点:下面是整合第2步和第4步
我们注意到第2步与第4步,需要生成两种app,其实是麻烦的,我们可以整合,但是却是分平台的,这节课以Android为例:
在目录android/app/build.gradle
android {
...
buildTypes {
debug {
...
// Note: CodePush updates should not be tested in Debug mode as they are overriden by the RN packager. However, because CodePush checks for updates in all modes, we must supply a key.
buildConfigField "String", "CODEPUSH_KEY", '"Staging的key"'
...
}
releaseStaging {
...
buildConfigField "String", "CODEPUSH_KEY", '""'
...
}
release {
...
buildConfigField "String", "CODEPUSH_KEY", '""'
...
}
}
...
}
接下去打开MainApplication.java,修改
把new CodePush参数中的第一个参数改为BuildConfig.CODEPUSH_KEY,其他不要改,否则报错
@Override
protected List getPackages() {
return Arrays.asList(
new MainReactPackage(),
new CodePush(BuildConfig.CODEPUSH_KEY, getApplicationContext(), BuildConfig.DEBUG) //修改这行new实例的第一个参数
);
}
报错
Error:Execution failed for task ':app:mergeDebugResources'.>=Error:=Cannot=create=directory C:\Users\Administrator\Desktop\testrn\android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values
如果运行报此错误尝试先运行模拟器,再执行react-native start,最后模拟器用reload,不要用AS去restart app,如果模拟器空白,那就用模拟器把退出app应用,重新进去。