CodePush
# 简介
CodePush 是微软提供的一套用于热更新React Native和Cordova应用的服务。
CodePush 是提供给React Native和Cordova开发者直接部署移动应用更新给用户设备的云服务。CodePush作为一个中央仓库,开发者可以推送更新(JS, HTML, CSS and images),应用可以从客户端 SDK 里面查询更新。CodePush可以让应用有更多的可确定性,也可以让你直接接触用户群。在修复一些小问题和添加新特性的时候,不需要经过二进制打包,可以直接推送代码进行实时更新。
# 安装
服务器部署:https://github.com/shm-open/code-push-server?tab=readme-ov-file
RN前端部署: https://github.com/microsoft/react-native-code-push v7.1.0稳定版,适配RN V0.70
项目配置cli脚手架:https://github.com/shm-open/code-push-cli <v3
npm install --save react-native-code-push
# 脚手架
npm install -g @shm-open/code-push-cli
1
2
3
4
5
2
3
4
5
# 集成
# Android
要将 CodePush 集成到您的 Android 项目中
# iOS
获取 CodePush 插件后,您需要将其集成到 React Native 应用的 Xcode 项目中并进行正确配置
# 多部署测试
# Android
配置了“多部署测试”功能
# iOS
Xcode 允许您为每个“配置”(例如 debug、release)定义自定义构建设置
# 快速开始
- 使用CodePush CLI创建一个CodePush 账号 (opens new window)
- 注册你的CodePush应用 (opens new window), 并分享 (opens new window)给你团队的其它开发者
- 用Cordova插件 (opens new window) 或 React Native插件 (opens new window)配置好CodePush并指向你希望的部署环境 注意:在iOS和Android使用自定义的ServerURL参数名大小写不同,iOS是在plist里新增CodePushServerURL,Android是在res/values/strings.xml 添加CodePushServerUrl
- 发布 (opens new window)更新
- 活的长而成功!详细资料 (opens new window)
# 账户管理
在开始发布应用更新之前,您需要创建一个 CodePush 帐户。
安装 CLI 后
# 创建帐户
code-push register
1
# 身份认证
code-push login
1
如果您需要在不启动浏览器
code-push login --accessKey <accessKey>
1
# 确定自己是否已登录
code-push whoami
1
# 退出登录
code-push logout
1
# 应用管理
# 注册应用程序
code-push app add <appName> <os> <platform>
code-push app add MyApp-Android android react-native
code-push app add MyApp-iOS ios react-native
1
2
3
4
2
3
4
# 列出所有Apps
code-push app ls
1
# 重命名
code-push app rename <appName> <newAppName>
1
# 删除
code-push app rm <appName>
1
# 部署管理
# Android
# ios
# 查看特定应用程序包含的部署列表
code-push deployment ls <appName> [--displayKeys|-k]
code-push deployment ls MyApp-iOS -k
1
2
3
2
3

# 热更新
# 更新策略
加载模块,调用sync方法,后台请求更新codepush.sync()
及时获得更新,从后台进入前台主动更新
AppState.addEventListener("change", (newState)=>{
newState === "active" && codepush.sync()
})
# 有新包更新的时候,调用
const update = await checkCodePushUpdate();
# 点击下载
await codePush.sync(
{
updateDialog: false as any,
installMode: codePush.InstallMode.IMMEDIATE,
mandatoryInstallMode: codePush.InstallMode.IMMEDIATE,
},
(status) => {
console.log('CodePush status:', status);
if (status === codePush.SyncStatus.UPDATE_INSTALLED) {
codePush.restartApp(); // ✅ 核心
}
if (
status === codePush.SyncStatus.UP_TO_DATE ||
status === codePush.SyncStatus.UNKNOWN_ERROR
) {
setShowProgress(false);
}
},
(progress) => {
if (progress?.totalBytes) {
setProgress(progress.receivedBytes / progress.totalBytes);
}
}
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 发布更新
code-push release-react <appName> <platform>
[--bundleName <bundleName>]
[--deploymentName <deploymentName>]
[--description <description>]
[--development <development>]
[--disabled <disabled>]
[--entryFile <entryFile>]
[--gradleFile <gradleFile>]
[--mandatory]
[--noDuplicateReleaseError]
[--outputDir <outputDir>]
[--plistFile <plistFile>]
[--plistFilePrefix <plistFilePrefix>]
[--sourcemapOutput <sourcemapOutput>]
[--sourcemapOutputDir <sourcemapOutputDir>]
[--targetBinaryVersion <targetBinaryVersion>]
[--rollout <rolloutPercentage>]
[--privateKeyPath <pathToPrivateKey>]
[--config <config>]
code-push release-react TropsSoccer-Android android -d dev --description "1.Hotfix v1.0.5 \n 2.Hotfix xxxx"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 打包发布
# Android
根据不同环境()
# aab
./gradlew bundleReleaseStaging
# apk
./gradlew assembleReleaseStaging
1
2
3
4
5
2
3
4
5
# iOS
上次更新: 2026/01/07, 08:34:45