一次搭建私有code-push服务,进行RN热更新之旅

链接:

code-push-server 热更新服务
https://github.com/lisong/code-push-server

code-push-web 热更新后台管理UI(没有更新,有bug)
https://github.com/lisong/code-push-web

react-native-code-push
https://github.com/lisong/react-native-code-push (code-push-server作者改写的)
https://github.com/Microsoft/react-native-code-push (微软)

参考

[creazybody]https://github.com/crazycodeboy/RNStudyNotes/tree/master/React%20Native%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2%E3%80%81%E7%83%AD%E6%9B%B4%E6%96%B0-CodePush%E6%9C%80%E6%96%B0%E9%9B%86%E6%88%90%E6%80%BB%E7%BB%93

=========================

正确使用code-push热更新

  • 苹果App允许使用热更新Apple's developer agreement, 为了不影响用户体验,规定必须使用静默更新。 Google Play不能使用静默更新,必须弹框告知用户App有更新。中国的android市场必须采用静默更新(如果弹框提示,App会被“请上传最新版本的二进制应用包”原因驳回)。
  • react-native 不同平台bundle包不一样,在使用code-push-server的时候必须创建不同的应用来区分(eg. CodePushDemo-ios 和 CodePushDemo-android)
  • react-native-code-push只更新资源文件,不会更新java和Objective C,所以npm升级依赖包版本的时候,如果依赖包使用的本地化实现, 这时候必须更改应用版本号(ios修改Info.plist中的CFBundleShortVersionString, android修改build.gradle中的versionName), 然后重新编译app发布到应用商店。
  • 推荐使用code-push release-react 命令发布应用,该命令合并了打包和发布命令(eg. code-push release-react CodePushDemo-ios ios -d Production)
  • 每次向App Store提交新的版本时,也应该基于该提交版本同时向code-push-server发布一个初始版本。(因为后面每次向code-push-server发布版本时,code-puse-server都会和初始版本比较,生成补丁版本)

一、搭建服务

系统:Ubuntu
所需环境:node , npm,mysql
1.安装mysql

sudo apt-get install mysql-server
apt-get isntall mysql-client
sudo apt-get install libmysqlclient-dev

安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功:

sudo netstat -tap | grep mysql

通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。

登陆mysql数据库可以通过如下命令:

 mysql -u root -p 

-u 表示选择登陆的用户名, -p 表示登陆的用户密码,上面命令输入之后会提示输入密码,此时输入密码就可以登录到mysql。

mysql 8.x有一个bug,登录mysql,后执行下面的命令

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourRootPassword';

FLUSH PRIVILEGES;
百度mysql的启动、停止,重启,修改密码命令。加入开机启动。

2.安装pm2

sudo npm i -g pm2

3.安装code-push-server

git clone https://github.com/lisong/code-push-server.git
cd code-push-server
npm install

4.初始化数据库
进入源码目录,执行

./bin/db init --dbhost "your mysql host" --dbport "your mysql port"  --dbuser "your mysql user" --dbpassword "your mysql password"

5.编辑config/config.js
local.storageDir ---------- 存储热更新增量包的文件夹绝对路径,确保文件夹存在且有读写权限
local.downloadUrl --------- 当前主机ip
common.dataDir --------- 增量文件计算文件的文件夹绝对路径,确保文件夹存在且有读写权限
common.codePushWebUrl ----------- web管理页面url
jwt.tokenSecret ----------- token生成,推荐使用 https://www.grc.com/passwords.htm 获取(63 random alpha-numeric characters (a-z, A-Z, 0-9)),替换INSERT_RANDOM_TOKEN_KEY
db ------------ 数据库设置 username,password,host,port 改成自己的

6.创建process.json

{
  "apps": [
    {
      "name": "code-push-server",
      "max_memory_restart": "300M",
      "script": "/code-push-server源码文件夹绝对路径/bin/www",
      "instances": "max",
      "exec_mode": "cluster",
      "env": {
        "NODE_ENV": "production",
        "PORT": 3000,
        "CONFIG_FILE": "/code-push-server源码文件夹绝对路径/config/config.js"
      }
    }
  ]
}

注释:instances //开启实例数量,max为cpu核数 exec_mode: //集群模式,最大提升网站并发

7.启动停止重启服务
pm2 start/stop/restart process.json

8.测试是否成功启动

curl -I http://YOUR_CODE_PUSH_SERVER_IP:3000/

return httpCode 200 OK

二、创建热更新app

1.安装code-push-cli

 npm install code-push-cli@latest -g

2.登录web获取token
code-push login http://YOU_SERVICE_IP:3000

3.改管理员密码(默认:账号:admin 密码:123456)
curl -X PATCH -H "Authorization: Bearer 在页面获取的TOKEN" -H "Accept: application/json" -H "Content-Type:application/json" -d '{"oldPassword":"123456","newPassword":"新密码"}' http://YOU_SERVICE_IP:3000/users/password
4.分平台创建热更新app,参考其他文章;

三、移动端集成react-native-code-push

1.安装 react-native-code-push

npm install --save react-native-code-push@latest
react-native link react-native-code-push

注意:是否替换成code-push-server作者github仓库的版本还没研究
2.集成
参考其他文章
3.使用
js入口需要热更新的部分代码App,需要包裹在CodePush下

 CodePush({ checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME })(App)

componentWillMount(){
CodePush.disallowRestart();
}
componentDidMount(){
CodePush.allowRestart();
//其他代码,检查更新
}

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

推荐阅读更多精彩内容