RN的热更方案也在不断发展,目前RN中文官网上推的是pushy,然而是收费的,对于小企业就比较劝退了。另一个比较成熟的方案是react-native-code-push,本文将基于CodePush集成热更新。

关于热更新的特性,想要的ta都有

粗略阅读文档,CodePush的特性还是非常全的,涵盖一般场景能设想到的各种问题。
Q:热更支持到什么程度?
A:JS的变动,Image等组件的source引用都可以热更。遗憾的是,CodePush是bundle的更新,意味着原生代码的变动不能通过热更解决。对于小问题甚至小功能迭代,这个程度已经足够了。

Q:集成复杂度如何,要不要自建热更服务器?
A:CodePush经过无数版本迭代,集成越发傻瓜化,原本是需要搭建server的,现在server的服务已经打包到微软自家的AppCenter,所以单就集成的工作量而言,一天就可以搞定的。

Q:嗯?等等,微软?那热更的速度会不会慢啊?
A:我尝试了一下并不会,一个热更包4-5秒就下载完了,用户无感知,默认下次启动加载更新包。

Q:要钱吗?
A:不要。。。

项目地址:react-native-code-push,准备开搞!

注册AppCenter,创建应用

打开AppCenter,按步骤注册好你的账号。然后点击添加应用(Android和iOS要分别创建)。

创建应用后,进入应用详情,点击CodePush并开启CodePush服务。

安装CodePush

官网有CodePush版本与RN版本的对应图,选择合适的版本安装(本文以7.0.2为例)。

命令行安装:

npm install --save react-native-code-push

Android配置

0.60以下的配置比较繁琐,详见文档。
对于0.60以上的应用,首先修改android/settings.gradle,将原本

include ':app'

修改为

include ':app', ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')

按照官网文档,需要放在文件末尾。
接下来修改android/app/build.gradle,添加CodePush插件:

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

注意这里和官网文档不一样,官网文档要求添加如下两行:

实测会无法编译,去掉第一行即可。

接下来修改MainApplication.java

...
// 改这里
import com.microsoft.codepush.react.CodePush;public class MainApplication extends Application implements ReactApplication {private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {...// 改这里@Overrideprotected String getJSBundleFile() {return CodePush.getJSBundleFile();}};
}

最后,为了标识应用的发布类型,需要配置一个key,即每个应用的Production和Staging版本的key是不同的。当然,应用以及应用补丁的迭代不会影响key,例如1.0版本和1.1版本的APP,只要都是Production版本,用的是同一个key。

为了获取key,需要npm安装appcenter-cli:

npm install -g appcenter-cli

初次安装需要先登录:

appcenter login

命令行获取key:

appcenter codepush deployment list -a <ownerName>/<appName> -k

如下Deployment Key就是我们需要的key:

编辑strings.xml,加入key的配置:

<resources><string name="app_name">AppName</string><string moduleConfig="true" name="CodePushDeploymentKey">你的key</string></resources>

iOS配置

pod安装:

cd ios && pod install && cd ..

编辑AppDelegate.m,引入:

#import <CodePush/CodePush.h>

找到如下这行

return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

替换成

return [CodePush bundleURL];

最后,为了标识应用的发布类型,需要配置一个key,即每个应用的Production和Staging版本的key是不同的。当然,应用以及应用补丁的迭代不会影响key,例如1.0版本和1.1版本的APP,只要都是Production版本,用的是同一个key。

为了获取key,需要npm安装appcenter-cli:

npm install -g appcenter-cli

初次安装需要先登录:

appcenter login

命令行获取key:

appcenter codepush deployment list -a <ownerName>/<appName> -k

如下Deployment Key就是我们需要的key:

编辑Info.plist,添加键CodePushDeploymentKey,值为命令行显示的key。

JS集成

RN的JS只需要简单配置即可:

import codePush from "react-native-code-push";class MyApp extends Component {}MyApp = codePush(MyApp);

当然,CodePush有丰富的配置,可以定义更新时机、弹窗、更新回调等等,一般而言用默认配置可以满足使用场景了。

CodePush当然允许自定义检查更新的时机,可以不用在App配置,而是调用codePush.sync()

打出更新包

如果你急不可耐地想要尝试更新,那么可以先打包出一个Production包,然后对JS代码略作修改,接着在项目根目录命令行运行:

appcenter codepush release-react -a <ownerName>/<appName> -d Production

将手机连接电脑调试,以Android为例,命令行运行(初次先要运行code-push login):

code-push debug android

这样可以监听log,之后就可以愉快地测试了!

当然,完整的发布流程则是先打包Staging更新补丁,在Staging的版本上测试,然后promote到Production版本。

开始玩出花

小试一下后你可能会关注更多的问题,例如我的应用配置Production和Staging是“写死”的,可不可以灵活配置?问题补丁的回滚怎么搞?能不能更新指定范围版本的应用?

可以,都可以!看文档吧,本文只是做个介绍,再写下去就成CV战士啦。

2021了React Native热更新怎么搞(react-native-code-push,Android,iOS)相关推荐

  1. React Native 热更新方案

    转载: https://blog.csdn.net/xiangzhihong8/article/details/73201421 随着 React Native 的不断发展完善,越来越多的公司选择使用 ...

  2. React+webpack热更新配置

    首先安照webpack4.x热更新配置 在react项目中发现修改css文件可以热更新: 修改js文件不会热更新,报: Ignored an update to unaccepted module,T ...

  3. native react 更新机制_React Native 热更新实现(客户端 + 服务器端)

    1. 背景 目前,大家考虑使用React Native 技术的关键点主要有三个: iOS和Android端可以使用统一的语言进行构建,并且部分组件代码可以实现共用 热更新能力,无需发布版本即可实现升级 ...

  4. React Native热更新方案

    随着 React Native 的不断发展完善,越来越多的公司选择使用 React Native 替代 iOS/Android 进行部分业务线的开发,也有不少使用 Hybrid 技术的公司转向了 Re ...

  5. (笔记) RN React Native 热更新(react-native-code-push) AppCenter

    苹果App允许使用热更新Apple's developer agreement, 为了不影响用户体验,规定必须使用静默更新. Google Play不能使用静默更新,必须弹框告知用户App有更新.中国 ...

  6. [深入剖析React Native]热更新之react-native-pushy使用指南(Android)

    本文使用RN版本:0.33.0 react-native-pushy是ReactNative中文网推出的代码热更新服务,github地址:https://github.com/reactnativec ...

  7. React Native热更新(iOS)-Pushy

    React Native的出现,使的开发iOS代码出现了更便捷的方式.由于RN是使用脚本语言编写的,实现了"解释执行"的方式,而这种执行方式的修改只需替换脚步即可,不需要重新发布程 ...

  8. React Native 热更新框架 - PUSHY

    文章目录 安装 配置Bundle URL 创建应用 代码集成 发布热更新 安装 项目根目录下运行如下命令: # 全局安装命令行工具,每台电脑只用装一次 yarn global add react-na ...

  9. React Native-Pushy热更新

    参考官网 一 安装 1. 安装 在你的项目根目录下运行以下命令:(根目录通常为带有package.json的) npm install -g react-native-update-cli rnpm ...

最新文章

  1. php 5.4.36 sqlserver,PHP:PHP5.4连接SQLSERVER
  2. 注解 @Scheduled
  3. 怎么使用python中的字典_Python中字典的使用
  4. Java性能调优:充分利用垃圾收集器
  5. mysql账号密码忘_mysql用户名密码忘记了解决方法
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 8丨平面上的最近距离【难度中等】
  7. mysql在linux下的完整安装
  8. 5分钟快速了解微信小程序如何获取收货地址,耶稣也拦不住,我说的!!!
  9. 新用户如何查看苹果/Mac电脑的硬件配置?
  10. php asp网站本地调试,php/asp网站程序本地调试工具
  11. 地理探测器的学习与研究初探
  12. 哔哩哔哩中缓存的视频和音频如何合并
  13. 案例|工业物联网解决方案•泵站智慧云平台
  14. 个人博客网站的设计与实现
  15. 当代最值得收藏的画家作品_当代最具收藏价值的画家:许敬如作品欣赏
  16. redis持久化机制,深入分析redisAOF和RDB模式的利弊
  17. 经典的股票量化交易策略(含源码)
  18. Zookeeper 安装配置(大数据工程师工作笔记)
  19. Pr_cc 学习笔记(十)关键帧 特效
  20. “第二期政府CIO论坛”顺利举行

热门文章

  1. 季节前面为什么用in_英语中表示日期,什么时候用on什么时候用in,什么时候用at或for?就...-日期用in还是on-英语-简镜匀同学...
  2. android 强制息屏,如何让Android设备实现息屏显示
  3. Android 分区和内存监控
  4. Python关于抽奖的思考——不当非酋
  5. 动态生成类别目录树div
  6. v-echarts的介绍及使用
  7. Kotlin系列之Lambda编译成字节码过程完全解析
  8. 计算机硬件软件基础,计算机硬件与软件基础知识完整ppt课件
  9. 资深感冒人士教你征服感冒之法
  10. Git删除SSH的方法