ReactNative 使用微軟的CodePush進行熱更新,繼續填坑


1.別被開發環境騙了

在我們開發react native的時候,一鍵運行工程,js改了,只要cmd+R就可以刷新了。然后會輕易以為真正app上線的時候也是一樣,只要app一打開就是最新的。

其實!這是一個騙局!

假如沒有微軟的CodePush框架,react native只是一個用來開發原生本地app的工具,和原生開發並無大區別。

原因如下:

(1)目前支持ios的nodejs解釋環境必須運行在MacOS上,假如你的linux服務器,根本就運行不了針對ios的react開發環境

(2)蘋果不允許即時的動態更新的app上架

 

2.微軟的codepush框架

微軟的codepush框架確實解決了這個問題,其操作原理是這樣:

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

(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM