用CodePush在React Native App中做热更新
最近在学react native,学到了codepush热更新。
老师讲了两种实现的方法,现将其记录一下。
相比较原生开发,使用react native开发app不仅能节约开发成本,还能做原生开发不能实现的热更新功能。
使用原生技术开发app时,每次代码做了改动后,都需要提交到应用商店进行审核,审核通过后,需要等用户重新下载安装后才会生效。而如果使用react native开发app,开发者可随时发布新版本,不用经过应用商店的审核,用户即可使用到新版本,并且还可做到不用经过用户的同意就强制安装新版本。
codepush是微软的技术,因为服务器在国外,所以不太稳定。如果开发的app是针对国内市场的,应该使用codepush中国。
要使用codepush,需安装依赖包。可使用官方提供的工具cpcn-client来安装依赖包。cpcn-client的下载地址是: 。
代码实现比较简单。第一种方法是直接改变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.chedk() 方法的参数:
checkcallback: 在检查是否有可更新的版本后调用这个方法,如果 remotepackage 不是 null,表示有可更新的版本。如果要继续更新,就调用 agreecontinuefun(true),如果不想继续更新,就调用 agreecontinuefun(false)。
downloadprogresscallback: 在下载新版本的过程中调用这个方法。可用它的参数 downloadprogress 做进度条。downloadprogress.receivedbytes 是已经下载的字节数,downloadprogress.totalbytes 是总字节数。
installedcallback: 当新版本安装完成后调用这个方法。需调用 restartfun(true) 重启app,重启后新版本就生效了。