CodePush接入流程
最后更新于
最后更新于
安装 CodePush CLI
注册 CodePush 账号
在 CodePush 服务器注册 App
原生应用中配置 CodePush
RN 代码中集成 CodePush
发布更新的版本
执行命令后会打开一个授权网页 "App Center ",选择授权登录方式。
按照提示操作,注册成功后,CodePush 会给一个 token
将其复制到命令行,回车即可,显示如下提示即登录成功。
-
[注 1]
注册成功后,会自动登录了。除非明确执行 logout
,否则不需要再次登录。
[注 2] 关于 Access Key
当执行 code-push login
登录后,会生成一个新的 Access Key 并保存在本地磁盘上,这是登录的凭证(也是[注 1]的原因)。
当执行 code-push logout
将会删除这个 Access Key。
如果在某台机器上忘记 logout,可以使用 code-push access-key ls
列出和 code-push access-key rm <accessKey>
删除 Access Keys,来解除登录状态。
[注 3] CodePush 登录相关命令:
code-push login
登录
code-push loout
注销
code-push access-key ls
列出登陆的 token
code-push access-key rm <accessKye>
删除某个 access-key
code-push whoami
显示当前登录的 e-mail 账号
<appName>
- 应用名
<os>
- ios
、windows
、android
<platform>
- react-native
、cordova
...
因为 CodePush 在 iOS 和 Android 的更新包内容会有差异,在 iOS 和 Android 使用相同的 App 可能会导致安装异常。所以iOS 和 Android 要分别创建 App,两个 App 独立管理和发布更新:
执行 app add
成功后返回 Production
和 Staging
两个 Deployment Key。
-
[注 1] 部署环境
在 CodePush 注册的应用默认包含两个部署环境:Staging
和 Production
。
也可以自定义部署环境如下:
[注 2] deployment ls 结果解读
Active
- 成功安装的数量目前运行这个版本。这个数字将会随着用户更新到或离开这个版本分别增加或减少。
Total
- 该版本更新收到的所有成功安装的总数。这个数字只会随新用户/设备安装它而增加。
Pending
- 更新被下载了但还没安装的数量。如果已经配置了立即更新但还是有 Pending,很可能是在 app 启动的时候没有调用 notifyApplicationReady/sync。
Rollbacks
- 该版本被自动回滚的次数。理想情况下这个数应该为 0 并不会显示。如果发布了一个包含严重问题(Crash)的更新,CodePush 插件将在安装时回滚到上一个版本,同时把问题反馈到服务端。
Rollout
- 显示可以接收更新的用户百分比,只会被显示在最新版本。
Disabled
- 该版本是否被标记成禁用,这个属性只有在版本禁用时才显示。
No installs recorded
- 表示这个版本在服务器上没有任何活动记录。这可能要么是因为被插件阻止了,或者用户还没有跟 CodePush 服务器同步。
[注 3] CodePush app 相关命令:
code-push app add
在账号里面添加一个新的 App
code-push app rm
在账号里移除一个 App
code-push app rename
重命名一个存在 App
code-push app ls
列出账号下面的所有 App
code-push app transfer
把 app 的所有权转移到另外一个账号
多个开发者合作同一个 CodePush 应用,可以把开发者添加为 collaborator,使用如下命令:
如果要自动设置 key 则根据要求,输入之前 app add
时获得的 key 即可。
可以通过
code-push deployment ls <appName> -k
查看 key。
推荐手动设置,方式如下
iOS deployment-key 的设置
创建 Configurations。
Xcode 打开项目 - [PROJECT] - [Info]
[Configurations] - 单击"+" - [Duplicate "Release" Configuration]
输入 Staging(名称可以自定义)
自定义 User-Defined Setting
[Build Setting],单机"+"选择 [User-Defined Setting]
输入 CODEPUSH_KEY (可自定义)
添加 Info.plist 设置
Key CodePushDeploymentKey
Type String
Value $(CODEPUSH_KEY)
版本设置
检查一下版本号是不是三位,如果不是的话,修改为三位(比如:1.0.0)。CodePush 只支持三位的,不然在推包的时候无法确定推包给哪个版本。
Android deployment-key 的设置
未尝试
-
[注] react-native link react-native-code-push
做了什么
Info.plist。如果使用了自动设置 Key,会在 Info.plist 下创建一个新的键值对。
AppDelegate。如下图,在非 DEBUG 情况下通过 CodePush 获取 bundleURL
首先在 js 中加载 CodePush 模块:
然后在根 component(通常为 App) 的 componentDidMount
中调用 sync
方法,再把 export default 包装一层更新策略
这里 checkFrequency 定义了何时进行 bundle 更新,这里的 MANUAL 是说让用户选择是否更新,还有诸如 ON_APP_RESUME 是指在后台静默地将更新下载到本地,等待 App 下一次启动的时候应用更新。
-
[注] sync 的一些说明
sync 是自动更新模式,官方还提供了手动更新模式,我还没试过
sync 支持的参数
deploymentKey (String): 部署 key,指定你要查询更新的部署秘钥,默认情况下该值来自于 Info.plist(Ios)和 MianActivity.java(Android)文件,你可以通过设置该属性来动态查询不同部署 key 下的更新。
installMode (codePush.InstallMode): 安装模式,用在向 CodePush 推送更新时没有设置强制更新(mandatory 为 true)的情况下,默认 codePush.InstallMode.ON_NEXT_RESTART 即下一次启动的时候安装。
mandatoryInstallMode (codePush.InstallMode):强制更新,默认 codePush.InstallMode.IMMEDIATE。
minimumBackgroundDuration (Number):该属性用于指定 app 处于后台多少秒才进行重启已完成更新。默认为 0。该属性只在 installMode
为 InstallMode.ON_NEXT_RESUME
情况下有效。
updateDialog (UpdateDialogOptions) :可选的,更新的对话框,默认是 null,包含以下属性
appendReleaseDescription (Boolean) - 是否显示更新 description,默认 false
descriptionPrefix (String) - 更新说明的前缀。 默认是” Description: “
mandatoryContinueButtonLabel (String) - 强制更新的按钮文字。 默认 to “Continue”.
mandatoryUpdateMessage (String) - 强制更新时,更新通知。 Defaults to “An update is available that must be installed.”.
optionalIgnoreButtonLabel (String) - 非强制更新时,取消按钮文字。 Defaults to “Ignore”.
optionalInstallButtonLabel (String) - 非强制更新时,确认文字。 Defaults to “Install”.
optionalUpdateMessage (String) - 非强制更新时,更新通知。 Defaults to “An update is available. Would you like to install it?”.
title (String) - 要显示的更新通知的标题。 Defaults to “Update available”.
Android
iOS
在命令行输入 code-push release-react 回车,可以查看更多参数,诸如 -des 更新内容描述、-d 推送环境
Authentication succeeded
命令行
Configuration
User-Defined Setting
Info.plist
AppDelegate