code-push的使用

转自:Code Push 热更新使用详细说明和教程

简介:CodePush是一个微软开发的云服务器。通过它,开发者可以直接在用户的设备上部署手机应用更新。CodePush相当于一个中心仓库,开发者可以推送当前的更新(包括JS/HTML/CSS/IMAGE等)到CoduPush,然后应用将会查询是否有更新。需要注意的是,针对react-native只能推送js和image,其他的不能推送。比如,安卓文件被修改了,这样的功能,就不能被实现。


一、安装CodePush CLI

控制台输入 npm install -g code-push-cli,就可以安装了。

安装完毕后,输入 code-push -v查看版本代表成功。



二、创建CodePush账号

控制台输入 code-push register 后,将会打开一个网页进行注册

CodePush账号支持 github和 Microsofe,选其中一个就可以了。

我选择的是 github,授权完毕后,网页将会显示一个token,复制它到控制台的中就成功了。

成功登陆后,你的session文件将会写在 /Users/***(你的用户名)/.code-push.config。

PS:相关命令

code-push login 登陆

code-push loout 注销

code-push access-key ls 列出登陆的token

code-push access-key rm  删除某个 access-key


三、在CodePush服务器上注册app

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

PS:CODE-PUSH APP相关命令

add 在账号里面添加一个新的app

remove 或者 rm 在账号里移除一个app

rename 重命名一个存在app

list 或则 ls 列出账号下面的所有app

transfer 把app的所有权转移到另外一个账号


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

第一步。在应用中安装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文件里面添加额为的创建任务:

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

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

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

//1.引用包importcom.microsoft.codepush.react.CodePush;publicclassMainActivityextendsReactActivity{//2.覆盖 getJSBundleFile 方法,让CodePush决定当app启动时,去哪里加载 JS bundle@OverrideprotectedStringgetJSBundleFile(){returnCodePush.getBundleUrl(): }@OverrideprotectedListgetPackages(){//实例化 CodePush运行时,把它添加到 packages,填写正确的 部署秘钥( deployment key)returnArrays.asList(

new MainReactPackage(), newCodePush("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  部署

code-push deployment rename  重命名

code-push deployment rm  删除部署

code-push deployment ls  列出应用的部署情况

code-push deployment ls -k 查看部署的key

code-push deployment history  查看历史版本(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.js --bundle-output ./bundles/index.android.bundle --assets-dest ./bundles --dev false

需要注意的是:

忽略了资源输出是因为 输出资源文件后,会把bundle文件覆盖了

输出的bundle文件名不叫其他,而是 index.android.bundle,是因为 在debug模式下,工程读取的bundle就是叫做 index.android.buundle

平台可以选择 android 或者 ios。

具体的命令可以参考这里

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

code-pushrelease<应用名称> <对应的应用版本>--deploymentName 更新环境--description 更新描述--mandatory 是否强制更新

注意:

CodePush默认是更新 staging 环境的,如果是staging,则不需要填写 deploymentName。

如果有 mandatory 则会让客户端强制更新

对应的应用版本(targetBinaryVersion)是指当前app的版本,而不是你填写的更新版本。譬如客户端版本是 1.0.0,如果我们需要更新客户端,那么targetBinaryVersion填的就是 1.0.0。(踩了坑,半夜调试到哭了- -)

在控制台输入 code-push deployment history Staging 可以看到版本更新的时间、描述等等属性。

这是我的输入:

code-push release APP名称 ./bundles 1.0.0


踩过的坑:1.上传到服务器上,有一些样式加载不出来。是因为bundles生成出问题,用上面生成bundles的语句,就不会出问题。

2.发布的时候出问题。code-push release APP名称 ./bundles 1.0.0,这行语句,后面的1.0.0版本号,是已经安装在手机上的APP版本,并不是自己电脑上正在开发的版本。版本出现问题,是检测不到的。

就比如,我手机上的版本是1.0.0,我每次更新的时候只更新服务器上1.0.0,而不去更新1.0.1或者其他的版本。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容