React-Native 热更新 CodePush

HotUpgrade

1. CodePush

staging代表开发版的热更新部署,production代表生产版的热更新部署!

  • 0.网上资料和官网最新的不一样

  • 1.安装CodePush: npm install -g code-push-cli

  • 2.创建CodePush账号: code-push register (会打开网页进行注册,有点卡)

  • 3.复制 token到控制台

  • 4.在CodePush服务器上注册app:

      1. code-push app add MyApp-iOS ios react-native
      1. code-push app add MyApp-Android android react-native
      1. 复制部署秘钥staging或(code-push deployment ls appName)
  • 5.项目安装SDK:

      1. npm install --save react-native-code-push
      1. react-native link react-native-code-push
      1. code-push deployment ls <AppName> -k
      1. 复制staging 到 MainApplication.java 里deployment-key-here
      1. 调用sync函数
      1. code-push release-react MyApp-Android android
  • 相关命令3

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

      1. code-push app add 在账号里面添加一个新的app
      1. code-push app remove 或者 rm 在账号里移除一个app
      1. code-push app rename 重命名一个存在app
      1. code-push app list 或则 ls 列出账号下面的所有app
      1. code-push app transfer 把app的所有权转移到另外一个账号
      1. 发布更新
        1. 第一种方式:通过code-push release-react发布更新
          1. code-push release-react MyApp-iOS ios
          1. code-push release-react MyApp-Android android
          1. code-push release-react MyApp-iOS ios -t 1.0.0 --dev false --d Production --des "" -r 100
          1. 优化操作流程" --m true
          1. 其中参数–t为二进制(.ipa与apk)安装包的的版本;–dev为是否启用开发者模式(默认为false);–d是要发布更新的环境分Production与Staging(默认为Staging);–des为更新说明;–m 是强制更新
          1. 通过code-push release发布更新(收藏)
          1. 应用创建时有两个环境,一个是Staging,一个是Production,开发阶段用Staging,开发完成可以用code-push promote 将应用迁移到Production中
          1. code-push patch 应用名 Production -r 100%
          1. code-push promote RNCodePush-iOS Staging Production -r 20 将Staging 推到 Production 推20%的用户。
  • 相关命定5

      1. code-push deployment add 部署
      1. code-push deployment rename 重命名
      1. code-push deployment rm 删除部署
      1. code-push deployment ls 列出应用的部署情况
      1. code-push deployment ls -k 查看部署的key
      1. code-push deployment history <AppName> 查看历史版本(Production 或者 Staging)
      1. code-push deployment clear <appName> Production or Staging // 清除历史部署记录
      1. code-push rollback RNCodePush-ANdroid Staging --targetRelease v4 回滚到自定版本
  • Install Metrics(安装指标)

    • Active:成功安装并运行当前release的用户的数量,即表示当前下载更新部署的活跃用户数量,of 左边数会随着用户安装、卸载而 增加、减少。of右边数代表当前安装或收到部署版本的用户数,当有用户卸载App,该数值会降低。 因此它很好的解释了当前更新包有多少活跃用户,多少用户接收过这个安装包
    • Total:成功安装部署当前release的用户量,只增不减
    • Pending:当前release版本被下载的数量,但是还没有被安装,该值会随着用户下载安装后增加, 在卸载时降低。
  • 更新规则


来自网络

你APP内plist文件写的版本号可能是1.0.0,所以你的reactjs打包上传的版本也要是1.0.0(而不是1.0.1这样递增),你需要和APP保持一致,然后服务器会根据你最新上传的且和APP一样的版本作为最新版。

范围表达式

* 1.2.3 仅仅只有1.2.3的版本

* *所有版本

* 1.2.x 主要版本1,次要版本2的任何修补程序版本

* 1.2.3 - 1.2.7 1.2.3版本到1.2.7版本

* >=1.2.3 <1.2.7 大于等于1.2.3版本小于1.2.7的版本

* ~1.2.3 大于等于1.2.3版本小于1.3.0的版本

* ^1.2.3 大于等于1.2.3版本小于2.0.0的版本 

相关代码5.4


//通知CodePush,一个更新安装好了。当你检查并安装更新,(比如没有使用sync方法去handle的时候),这个方法必须被调用。否则CodePush会认为update失败,并rollback当前版本,在app重启时。 
当使用sync方法时,不需要调用本方法,因为sync会自动调用,我没有调用,还是加上了
--------------------- 
作者:CrazyCodeBoy 
来源:CSDN 
原文:https://blog.csdn.net/fengyuzhengfan/article/details/52003798 
版权声明:本文为博主原创文章,转载请附上博文链接!
public componentDidMount () {
    // 必须要刷新
    CodePush.notifyAppReady()
  } 

CodePush.sync(
    options: Object, 
    syncStatusChangeCallback: function(syncStatus: Number), 
    downloadProgressCallback: function(progress: DownloadProgress)
): Promise<Number>;
传入三个参数
1. options = { installMode: CodePush.InstallMode.IMMEDIATE, updateDialog: true }
    installMode (codePush.InstallMode): 安装模式,用在向CodePush推送更新时没有设置强制更新(mandatory为true)的情况下,默认codePush.InstallMode.ON_NEXT_RESTART即下一次启动的时候安装。
    mandatoryInstallMode (codePush.InstallMode):强制更新,默认codePush.InstallMode.IMMEDIATE
    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”.
        具体可以查看我上面的代码:
        还有一个是:codePush.InstallMode,有三种模式,
            一个是立即启动,nstallMode.IMMEDIATE 
            一个是下次启动安装:InstallMode.ON_NEXT_RESTART
            一个是程序在前台,并没有从后台切换到前台的情况下用的InstallMode.ON_NEXT_RESUME
2.状态
3.进度

iOS配置时问题

1.  TARGETS->Build Settings->Header Search Paths-> 添加
$(SRCROOT)/../node_modules/react
$(SRCROOT)/../node_modules/react-native-code-push (可不加)

2. 'React/RCTEventEmitter.h' file not found
  1. Disable the parallel builds:
        - xCode menu -> Product -> Scheme -> Manage Shemes...
        - Double click on your application
        - Build tab -> clear the tick on Pallelize Build
        - Add react as a project dependecy

  2. xCode Project Navigator -> drag React.xcodeproj from Libraries to root tree
      - Build Phases Tab -> Target Dependencies -> + -> add React

安装签名

    keytool -genkey -v -keystore my-release-key.keystore  -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
    注意上面的my-release-key这个名字可以自己取名,同时my-key-alias也是自己取名,其中第二个名称alias参数后边的别名,在后面你在为应用签名的时候需要用到,所以暂时记录一下这个别名
    添加签名
    signingConfigs {
            release {
                storeFile file('../keystores/rn-test.keystore')
                storePassword 'name'
                keyAlias 'name'
                keyPassword 'name'
            }
        }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
    
    ./gradlew assembleDebug 编译并打Debug包
    ./gradlew assemblexiaomiDebug 编译并打xiaomi的debug包,其他类似
    ./gradlew assembleRelease 编译并打Release的包
    ./gradlew assemblexiaomiRelease 编译并打xiaomi的Release包,其他类似
    ./gradlew installRelease Release模式打包并安装
    ./gradlew uninstallRelease 卸载Release模式包


React-Native 篇

七分设计感的纯React-Native项目Mung

一个完整小巧的Redux全家桶项目

react-native拖拽排序

多功能React-Native-Toast组件

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

推荐阅读更多精彩内容