之前一直是做原生ios開發(fā)彻舰,早就聽說react-native可以實現(xiàn)熱更新棋凳,當時就覺得相當高大上的感覺,如今自己也開始著手RN開發(fā)绒障,也終于和這個仰慕已久的熱更新打了照面。這里就自己在集成code-push中遇到的一些問題以及使用來做一個總結(jié)捍歪。
code-push的入門使用篇户辱,這篇文章說得很詳細,自己開始集成的時候也是主要參照這篇文章http://www.reibang.com/p/6a5e00d22723
code-push的進階主要是參考這篇文章http://www.reibang.com/p/6e96c6038d80
當然也可以自己搭建服務器糙臼,可以參考這篇文章http://www.reibang.com/p/da0c1940b8e0
以下便是自己在使用code-push中的一些總結(jié)及遇到的一些問題
1庐镐、deploymentKey是否需要寫在CodePush.sync中?
其中isAndroid是定義的一個判斷是否為android平臺的常量福压,后面跟的字符串分別是android平臺和ios平臺的Production下deplomentKey掏秩;
而如果是正式上線的項目,就需要動態(tài)部署荆姆,如何動態(tài)部署在上面提到的code-push的進階那篇文章中有涉及到蒙幻。其實從code-push的源碼中我們也可以大致知道deploymentKey參數(shù)是否需要傳入
該參數(shù)是一個optional即可傳可不傳的參數(shù),圖中的注釋也提到如果不傳就會從ios中的info.plist中以及android的MainActivity.java中獲得胆筒,如果你傳了這個參數(shù)邮破,就直接使用你傳的key值,而不會使用原生中定義的key值了仆救。
2决乎、如何打Staging原生包?
在android中派桩,上面的code-push進階那篇文章提到的是使用./gradlew assembleStaging來打包Staging下的apk构诚,但是我在實踐中用這行命令不對,經(jīng)過一番琢磨铆惑,發(fā)現(xiàn)要使用./gradlew assembleReleaseStaging才行范嘱。
3、熱更新是更新的那些內(nèi)容撕阎?
熱更新只是更新的js代碼受裹,并不能更新原生中的更改,所以如果你在原生中改了什么東西或者是更新了一些RN的三方庫都需要重新打原生包發(fā)布到AppStore或者是android應用市場中去虏束,而不能通過熱更新來實現(xiàn)(ps* 本人就是更新了一個RN三方庫棉饶,然后想通過熱更新去讓用戶更新版本,結(jié)果就導致用戶點擊某個按鈕或者是頁面中去的時候程序直接崩潰镇匀,被項目經(jīng)理一頓批斗照藻,哈哈)
4、已經(jīng)發(fā)布到Production的更新如果撤銷汗侵?
如果發(fā)生了我上面提到的發(fā)布出去的更新有bug或者重大崩潰幸缕,不想讓更多的用戶檢測到此更新怎么辦?這時你可以馬上登錄code-push官網(wǎng)https://microsoft.github.io/code-push/ 晰韵,然后登錄進入到App Center,選擇你對應的App, 選擇Distribute-> Code-Push, 選擇Production,點擊你想要撤銷的版本发乔,有個設置的按鈕,將Enabled 關掉雪猪,這樣用戶就檢測不到你此版本了栏尚。
參考網(wǎng)址
code-push的入門使用篇
http://www.reibang.com/p/6a5e00d22723
react-native-code-push進階篇
http://www.reibang.com/p/6e96c6038d80
windows服務器搭建code-push-server
http://www.reibang.com/p/da0c1940b8e0