ReactNative 使用微软的CodePush进行热更新,继续填坑

1.别被开发环境骗了javascript

在咱们开发react native的时候,一键运行工程,js改了,只要cmd+R就能够刷新了。而后会轻易觉得真正app上线的时候也是同样,只要app一打开就是最新的。html

其实!这是一个骗局!java

假如没有微软的CodePush框架,react native只是一个用来开发原生本地app的工具,和原生开发并没有大区别。node

缘由以下:react

(1)目前支持ios的nodejs解释环境必须运行在MacOS上,假如你的linux服务器,根本就运行不了针对ios的react开发环境linux

(2)苹果不容许即时的动态更新的app上架ios

 

2.微软的codepush框架react-native

微软的codepush框架确实解决了这个问题,其操做原理是这样:服务器

(1)把react中的js打包,生成一个app(react-native官方就支持到这一步)app

(2)把最新的js包都打包上传到微软的服务器(codepush框架实现)

(3)在app中判断本地js包的版本号和微软服务器的版本号,而后所有下载下来后实现更新(codepush框架实现)

 

codepush.sync(paramas)能够实现更新,通常咱们放在app启动的时候进行。或者能够在APP中增长一个按钮,点击就运行更新。就像在开发环境中使用cmd+R同样从新load。可是微软的服务器速度让人呵呵。

 

3.codepush的使用

 详细的框架集成过程能够参考这两个博客:

http://blog.csdn.net/oiken/article/details/50279871

http://www.lai18.com/content/2561926.html

 

(1)这里有个坑,我在使用他们的方法打包资源并上传的时候,经过更新,app没法加载出资源文件!

因此我打包和上传的方式以下,MoxieSDKRN是我在CodePush注册的APP名称

打包:(图片+JS)
react-native bundle --entry-file index.ios.js --bundle-output ./bundle/main.jsbundle --platform ios --assets-dest ./bundle --dev false

上传:
code-push release MoxieSDKRN ./bundle 1.0.0

 

这里还有一个坑,会让你的图片显示不出,就是把你的结果拖入工程时,对于assets文件夹,你要选择create folder reference,而不是  create folder group.

正确的结果是assets文件夹是一个蓝色的文件夹,整个一块儿做为bundle resources

 

(2)这里另一个坑是:

如上面的博客所说,你APP内plist文件写的版本号多是1.0.0,因此你的reactjs打包上传的版本也要是1.0.0(而不是1.0.1这样递增),你须要和APP保持一致,而后服务器会根据你最新上传的且和APP同样的版本做为最新版。

查看版本记录可使用下面的命令。

 

4.经常使用的一些命令:

查看历史上传过的版本:

code-push deployment history MoxieSDKRN Staging

控制更新:

(1)弹窗提示更新

codePush.sync({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE });

(2)下次启动时更新

codePush.sync();

 

若是但愿自建热更新服务来实现,能够参考个人这篇博客:

http://www.cnblogs.com/rayshen/p/5737293.html

相关文章
相关标签/搜索