CodePush

CodePush是一个微软开发的云服务器。通过它,开发者可以直接在用户的设备上部署手机应用更新。CodePush相当于一个中心仓库,开发者可以推送当前的更新(包括JS/HTML/CSS/IMAGE等)到CoduPush,然后应用将会查询是否有更新。(欢迎关注我的gitHub)

流程

  1. 安装 CodePush CLI。
  2. 创建一个CodePush 账号
  3. 在CodePush服务器注册app
  4. 在app上添加CodePush SDK,配置升级相关代码。ReactNative可以参考这里
  5. 更新代码后,发布一个应用更新到服务器
  6. app收到升级推送

一、安装CodePush CLI

管理 CodePush 账号需要通过 NodeJS-based CLI.
只需要在控制台输入 npm install -g code-push-cli,就可以安装了。
安装完毕后,输入 code-push -v查看版本代表成功。
目前我的版本是 1.1.1-beta


二、创建CodePush账号

在控制台输入 code-push register 后,将会打开一个网页进行注册
CodePush账号支持 github和 Microsofe,选其中一个就可以了。
我选择的是 github,授权完毕后,网页将会显示一个token,复制它到控制台的中就成功了。

成功登陆后,你的session文件将会写在 /Users/guanMac/.code-push.config。

相关命令
  • code-push login 登陆
  • code-push loout 注销
  • code-push access-key ls 列出登陆的token
  • code-push access-key rm <accessKye> 删除某个 access-key

三、在CodePush服务器上注册app

为了让codePush服务器知道你的app,我们需要向它注册app: code-push app add <appName>,就可以了。

CODE-PUSH APP相关命令
  • add 在账号里面添加一个新的app
  • remove 或者 rm 在账号里移除一个app
  • rename 重命名一个存在app
  • list 或则 ls 列出账号下面的所有app
  • transfer 把app的所有权转移到另外一个账号

四、在app中添加SDK,配置相关代码

由于我目前只开发了android,以下就以android为例。

第一步。在应用中安装react-native插件,npm install --save react-native-code-push

第二步。在Anroid project中安装插件。
CodePush提供了两种方式:RNPM 和 Manual。
如果你不想依赖其他工具或者愿意走多几步额外的步骤,可以使用 Manual。不过像我这么懒的代码从业者,毫不犹豫地选择了 RNPM 这个实用工具。

第三步 运行 npm i rnpm 安装 RNPM。

第四步 运行 rnpm link react-native-code-push。这条命令将会自动帮我们在anroid文件中添加好设置(其实就是通过Manual的安装步骤)

第五步 在 android/app/build.gradle文件里面添加额为的创建任务:

    apply from "react.gradle"apply from "../../node_modules/react-native-code-push/android/codepush.gradle"

第六步 运行 code-push deployment ls <appName>获取 部署秘钥。默认的部署名是 staging,所以 部署秘钥(deployment key ) 就是 staging的可以。

第七步 添加配置。我们需要让app向CodePush咨询JS bundle的所在位置,这样CodePush就可以控制版本。更新 MainActivity.java文件:

 //1.引用包import com.microsoft.codepush.react.CodePush;public class MainActivity extends ReactActivity {//2.覆盖 getJSBundleFile 方法,让CodePush决定当app启动时,去哪里加载 JS bundle@Overrideprotected String getJSBundleFile(){return CodePush.getBundleUrl():}@Override protected List<ReactPackage> getPackages(){//实例化 CodePush运行时,把它添加到 packages,填写正确的 部署秘钥( deployment key)return Arrays.<ReactPackage> as List(new MainReactPackage(),new CodePush("deployment-key-here" , this , BuildCofig.DEBUG))}}

第八步 在 android/app/build.gradle中有个 android.defaultConfig.versionName属性,我们需要把 应用版本改成 1.0.0(默认是1.0,但是codepush需要三位数)。

    android{defaultConfig{versionName "1.0.0"}}

第九步 CodePush 插件下载和关联完毕后,就剩下在应用中部署更新控制策略:

  • 在 js中加载 CodePush模块: import codePush from 'react-native-code-push'
  • 在 componentDidMount中调用 sync方法,后台请求更新 codePush.sync()

以上就是在app中添加sdk和配置了。具体的还可以参考官方文档

部署APP相关命令
  • code-push deployment add <appName> 部署
  • code-push deployment rename <appName> 重命名
  • code-push deployment rm <appName> 删除部署
  • code-push deployment ls <appName> 列出应用的部署情况
  • code-push deployment ls <appName> -k 查看部署的key
  • code-push deployment history <appName> <deploymentNmae> 查看历史版本(Production 或者 Staging)

发布更新

发布更新之前,需要先把 js打包成 bundle,以下是anroid的做法:

第一步 在 工程目录里面新增 bundles文件:mkdir bundles

第二步 运行命令打包 react-native bundle --platform 平台 --entry-file 启动文件 --bundle-output 打包js输出文件 --assets-dest 资源输出目录 --dev 是否调试
这是我的打包命名: react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --dev false
需要注意的是:

  • 忽略了资源输出是因为 输出资源文件后,会把bundle文件覆盖了。
  • 输出的bundle文件名不叫其他,而是 index.android.bundle,是因为 在debug模式下,工程读取的bundle就是叫做 index.android.buundle。
  • 平台可以选择 android 或者 ios。
  • 具体的命令可以参考这里

打包bundle结束后,就可以通过CodePush发布更新了。在控制台输入

code-push release <应用名称> <Bundles所在目录> <对应的应用版本>--deploymentName 更新环境--description 更新描述--mandatory 是否强制更新

注意:

  • CodePush默认是更新 staging 环境的,如果是staging,则不需要填写 deploymentName。
  • 如果有 mandatory 则会让客户端强制更新
  • 对应的应用版本(targetBinaryVersion)是指当前app的版本,而不是你填写的更新版本。譬如客户端版本是 1.0.0,如果我们需要更新客户端,那么targetBinaryVersion填的就是 1.0.0。(踩了坑,半夜调试到哭了- -)
  • 在控制台输入 code-push deployment history <appName> Staging 可以看到版本更新的时间、描述等等属性。

这是我的输入

code-push release Equipment ./bundles 1.0.1

CodePush还可以进行很多种更新控制

# Release a mandatory update with a changelog
code-push release-react MyApp ios -m --description "Modified the header color"# Release an update for an app that uses a non-standard entry file name, and also capture
# the sourcemap file generated by react-native bundle
code-push release-react MyApp ios --entryFile MyApp.js --sourcemapOutput ../maps/MyApp.map# Release a dev Android build to just 1/4 of your end users
code-push release-react MyApp-Android android --rollout 25% --dev true# Release an update that targets users running any 1.1.* binary, as opposed to
# limiting the update to exact version name in the build.gradle file
code-push release-react MyApp-Android android --targetBinaryVersion "~1.1.0"

JS API

CHECKFORUPDATE

询问服务器是否有新版本。譬如:

    codePush.checkForUpdate().then( (update) =>{if( !update ){console.log("app是最新版了");}else {console.log("有更新哦");}});
GETCURRENTPACKAGE

获取当前已安装更新的元数据(描述、安装时间、大小等)。譬如:

    codePush.getCurrenPackage().then( (info) =>{console.log(info);})
NOTIFYAPPLICATIONREADY

通知CodePush进程,一个更新安装好了,当检测并安装更新,这个方法必须被调用。
否则在app重启时,Codepush会认为update失败,并回滚版本。
当使用 sync方法时,不需要调用此方法,因为它会默认调用

RESTARTAPP

立即重启App

SYNC

允许检测更新,下载并安装。除非我们需要自定义UI表现,不然直接用这个方法就可以了。

注意

  • CodePush只能更新 js或图片,原生代码的改变(二进制打包)是不能通过它更新的。
  • 服务端还木有开源,不能使用自己的服务器
  • 服务端在美国,国内可能会不稳定

Code Push 热更新使用详细说明和教程相关推荐

  1. AppCenter Code Push热更新

    codePush已经被微软将其移动到了appcenter中心,后续关于codePush的相关问题都移步到appcenter官网中进行查看https://appcenter.ms 本文只记录通过code ...

  2. React Native 0.60以上集成code push热更新

    安装 CodePush CLI 管理 CodePush 账号需要通过 NodeJS-based CLI.只需要在终端输入 npm install -g code-push-cli,就可以安装了. 安装 ...

  3. CodePush热更新组件详细接入教程

    CodePush热更新组件详细接入教程 什么是CodePush CodePush是一个微软开发的云服务器.通过它,开发者可以直接在用户的设备上部署手机应用更新.CodePush相当于一个中心仓库,开发 ...

  4. Cordova App 热更新 超详细教程

    前言: Cordova热更新的一些要点: 1.在不用重新安装App的情况下,更新你的代码.可以越过应用商店的审核步骤. 2.涉及的插件依赖发生变化时,无法使用热更新,需要去应用商店下载最新版本安装. ...

  5. webpack学习之路(四)webpack-hot-middleware实现热更新

    上一节我学习了webpack-dev-middleware,但是单独使用它并没有实现热更新,所以这节我要学习搭配使用webpack-hot-middleware,来实现热更新功能. 创建项目 我们依然 ...

  6. Android热更新初探,Bugly热更新的集成和使用(让你的应用轻松具备热更新能力)

    介绍   在介绍Bugly之前,需要先向大家简单介绍下一些热更新的相关内容.当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix.美团的Robust以及QZone的超级补丁方案.但它们都存在 ...

  7. cocos creator 热更新

    热更新的使用:官方教程: 官网热更新教程 第一步:先生成配置文件:project.manifest和version.manifest,这两个文件的作用,官网有说明 第二步:创建loading脚本,继承 ...

  8. Lua快速入门篇(XLua教程)(Yanlz+热更新+xLua+配置+热补丁+第三方库+API+二次开发+常见问题+示例参考)

                            <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探 ...

  9. Parcel React 开发服务器热更新实战

    parcel Parcel 是 Web 应用打包工具,适用于经验不同的开发者.它利用多核处理提供了极快的速度,并且不需要任何配置. 内容 官网教程没有实现devSever和动态更新相结合具体部署步骤. ...

最新文章

  1. codeblocks安装及使用教程(手把手傻瓜式教学)
  2. 软件架构阅读笔记15
  3. java 将一张图片切割成n个小图片,任意切割一张图片成新图片
  4. 码码的土狼:架构的原则、范式及治理
  5. python数据结构剑指offer-从尾到头打印链表
  6. c++ 状态模式(state)
  7. 汇编--查找第一个非0字符的五种方法
  8. JS控制图片滚动的效果
  9. Python3初级知识整理
  10. jQuery-ui-autocomplete
  11. 手把手教你调用微信扫一扫,三分钟包会
  12. 搞定 office 2007 错误 1706
  13. StrngBuffer可变字符串
  14. android刷原生rom教程,小米2/2S刷原生安卓Android4.4ROM刷机教程
  15. 达梦DW+DSC环境mal压缩测试
  16. 用Excel写个摸球模拟器玩玩
  17. XXE-什么是XXE
  18. Kafka 入门 (一)
  19. 解决Win10搜索框不能使用
  20. 掌握这些电脑知识,你会玩得很无耻

热门文章

  1. C++知识点15——使用C++标准库(IO流)
  2. 将C++里的Mat矩阵保存并由matlab提取分析
  3. E0144“const char *“ 类型的值不能用于初始化 “char *“ 类型的实体
  4. python dry原则_python使用建议与技巧分享(一)
  5. java继承和多态的实验报告_JAVA,继承和多态实验报告
  6. pmp知识点详解-项目大牛整理_PMP核心知识点—第五章:项目范围管理(1)
  7. ConcurrentHashMap源码解析(1)
  8. spring 整合websoket(整理)
  9. 安卓手机复制文件到电脑
  10. apr提高tomcat的web性能