最近在学React Native,学到了CodePush热更新。

老师讲了两种实现的方法,现将其记录一下。

相比较原生开发,使用React Native开发App不仅能节约开发成本,还能做原生开发不能实现的热更新功能。

使用原生技术开发App时,每次代码做了改动后,都需要提交到应用商店进行审核,审核通过后,需要等用户重新下载安装后才会生效。而如果使用React Native开发App,开发者可随时发布新版本,不用经过应用商店的审核,用户即可使用到新版本,并且还可做到不用经过用户的同意就强制安装新版本。

CodePush是微软的技术,因为服务器在国外,所以不太稳定。如果开发的App是针对国内市场的,应该使用CodePush中国

要使用CodePush,需安装cpcn-react-native依赖包。可使用官方提供的工具cpcn-client来安装依赖包。cpcn-client的下载地址是:http://code-push.cn/docs/1010.htm 。

代码实现比较简单。第一种方法是直接改变App.js组件:

import cpcn from 'cpcn-react-native';

class App  extends Component {

}

App = cpcn(App);

export default App;

这种方法在有新版本更新时,会使用默认的提示框,提示框中的文字也是默认的。灵活性不够。

第二种方法比较灵活,可以自定义对话框和进度条。这种方法使用 cpcn.check() 方法。

import cpcn from "cpcn-react-native";

class App extends Component {
componentDidMount(){
cpcn.check({
checkCallback: (remotePackage, agreeContinueFun) => {
if(remotePackage){ }
},
downloadProgressCallback: (downloadProgress) => { },
installedCallback: (restartFun) => { }
});
}
} export default App;

将 cpcn.check() 方法写在 App.js 的 componentDidMount 方法内,当 App 组件加载后调用此依法。

cpcn.check() 方法的参数:

checkCallback: 在检查是否有可更新的版本后调用这个方法,如果 remotePackage 不是 null,表示有可更新的版本。如果要继续更新,就调用 agreeContinueFun(true),如果不想继续更新,就调用 agreeContinueFun(false)。

downloadProgressCallback: 在下载新版本的过程中调用这个方法。可用它的参数 downloadProgress 做进度条。downloadProgress.receivedBytes 是已经下载的字节数,downloadProgress.totalBytes 是总字节数。

installedCallback: 当新版本安装完成后调用这个方法。需调用 restartFun(true) 重启App,重启后新版本就生效了。

用CodePush在React Native App中做热更新的更多相关文章

  1. React Native App设置&Android版发布

    React Native系列 <逻辑性最强的React Native环境搭建与调试> <ReactNative开发工具有这一篇足矣> <解决React Native un ...

  2. [译] Facebook:我们是如何构建第一个跨平台的 React Native APP

    英文原文(需FQ):https://code.facebook.com/posts/1189117404435352/ 早些时候,我们介绍过iOS版的React Native. React Nativ ...

  3. React Native APP结构探索

    APP结构探索 我在Github上找到了一个有登陆界面,能从网上获取新闻信息的开源APP,想来研究一下APP的结构. 附上原网址:我的第一个React Native App 具体来讲,就是研究一个复杂 ...

  4. 利用 Create React Native App 快速创建 React Native 应用

    本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...

  5. React Native & app demos

    React Native & app demos https://github.com/ReactNativeNews/React-Native-Apps https://github.com ...

  6. React Native工程中TSLint静态检查工具的探索之路

    建立的代码规范没人遵守,项目中遍地风格迥异的代码,你会不会抓狂? 通过测试用例的程序还会出现Bug,而原因仅仅是自己犯下的低级错误,你会不会抓狂? 某种代码写法存在问题导致崩溃时,只能全工程检查代码, ...

  7. React Native开发中自动打包脚本

    React Native开发中自动打包脚本 在日常的RN开发中,我们避免不了需要将我们编写的代码编译成安装包,然后生成二维码,供需要测试的人员扫描下载.但是对于非原生的开发人员来说,可能不知如何使用X ...

  8. 在React Native中集成热更新

    最近,在项目DYTT集成了热更新,简单来说,就是不用重新下载安装包即可达到更新应用的目的,也不算教程吧,这里记录一下. 1.热更新方案 目前网上大概有两个比较广泛的方式,分别是 react-nativ ...

  9. 我的第一个React Native App

    我用了三天时间实现了一个相对比较完整的React Native 新闻发布类型的示例.应用做得很简单,但大多React Native的组件都有用到,今天做一个分享(由于我电脑是Windows系统,所以只 ...

随机推荐

  1. js奥义:原型与原型链(1)

    要弄懂原型链,首先应先明白prototype原型对象.__proto__.对象三者之间的关系. 引入构造函数的相关定义: 构造函数是一种比较特殊的函数,用于批量实例化对象.通俗一点说,构造函数是用于生 ...

  2. 数据结构(十六)模式匹配算法--Brute Force算法和KMP算法

    一.模式匹配 串的查找定位操作(也称为串的模式匹配操作)指的是在当前串(主串)中寻找子串(模式串)的过程.若在主串中找到了一个和模式串相同的子串,则查找成功:若在主串中找不到与模式串相同的子串,则查找 ...

  3. Node配合WebSocket做多文件下载以及进度回传

    起因 为什么做这个东西,是突然间听一后端同事说起Annie这个东西,发现这个东西下载视频挺方便的,会自动爬取网页中的视频,然后整理成列表.发现用命令执行之后是下面的样子: 心里琢磨了下,整一个界面玩一 ...

  4. 在VMware下的Linux中的RAID10校验位算法下的磁盘管理

    988年由加利福尼亚大学伯克利分校发表的文章首次提到并定义了RAID,当今CPU性能每年可提升30%-50%但硬盘仅提升7%,渐渐的已经成为计算机整体性能的瓶颈,并且为了避免硬盘的突然损坏导致数据丢失 ...

  5. Data Deduplication Workflow Part 1

    Data deduplication provides a new approach to store data and eliminate duplicate data in chunk level ...

  6. nginx篇最初级用法之访问认证

    1打开conf下的配置文件 在server 之下 location 之上加入 auth_basic "Input Password:";    弹出的提示信息 auth_basic ...

  7. CSPS模拟 58

    爆炸 没算内存见祖宗 为什么偏偏这次卡内存我没算 T1 HashMap各种水 T2 智障背包!但是卡内存! T3 Dashspeed 考试用点分治+线段树水到了80 实际上是个没见过的套路题 在之前的 ...

  8. 用css或js实现文本输入框的特效

    1文本框默认点击特效: 点击文本框,外围会出现蓝色阴影,取消该特效,为该文本框添加css样式"outline:none;",就取消了默认特效. 2实现百度搜索框点击特效: 点击文本 ...

  9. 安装cnpm遇到的问题

    安装 cnpm时,用git安装时,安装好node环境后,测试版本号node -v和npm -v都没问题,可以输出版本号,但是安装cnpm时,使用淘宝镜像安装后,会出现如下警告: 这个是提醒你安装的版本 ...

  10. 「牛客练习赛53A」超越学姐爱字符串

    更好的阅读体验 Portal Portal1: Nowcoder Description 超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢\(\textrm{"c"}\)和\(\ ...