React-Native 熱更新 CodePush

HotUpgrade

1. CodePush

staging代表開發(fā)版的熱更新部署,production代表生產(chǎn)版的熱更新部署!

  • 0.網(wǎng)上資料和官網(wǎng)最新的不一樣

  • 1.安裝CodePush: npm install -g code-push-cli

  • 2.創(chuàng)建CodePush賬號(hào): code-push register (會(huì)打開網(wǎng)頁進(jìn)行注冊(cè),有點(diǎn)卡)

  • 3.復(fù)制 token到控制臺(tái)

  • 4.在CodePush服務(wù)器上注冊(cè)app:

      1. code-push app add MyApp-iOS ios react-native
      1. code-push app add MyApp-Android android react-native
      1. 復(fù)制部署秘鑰staging或(code-push deployment ls appName)
  • 5.項(xiàng)目安裝SDK:

      1. npm install --save react-native-code-push
      1. react-native link react-native-code-push
      1. code-push deployment ls <AppName> -k
      1. 復(fù)制staging 到 MainApplication.java 里deployment-key-here
      1. 調(diào)用sync函數(shù)
      1. code-push release-react MyApp-Android android
  • 相關(guān)命令3

      1. code-push login 登陸
      1. code-push loout 注銷
      1. code-push access-key ls 列出登陸的token
      1. code-push access-key rm <accessKye> 刪除某個(gè) access-key
  • 相關(guān)命令4

      1. code-push app add 在賬號(hào)里面添加一個(gè)新的app
      1. code-push app remove 或者 rm 在賬號(hào)里移除一個(gè)app
      1. code-push app rename 重命名一個(gè)存在app
      1. code-push app list 或則 ls 列出賬號(hào)下面的所有app
      1. code-push app transfer 把a(bǔ)pp的所有權(quán)轉(zhuǎn)移到另外一個(gè)賬號(hào)
      1. 發(fā)布更新
        1. 第一種方式:通過code-push release-react發(fā)布更新
          1. code-push release-react MyApp-iOS ios
          1. code-push release-react MyApp-Android android
          1. code-push release-react MyApp-iOS ios -t 1.0.0 --dev false --d Production --des "" -r 100
          1. 優(yōu)化操作流程" --m true
          1. 其中參數(shù)–t為二進(jìn)制(.ipa與apk)安裝包的的版本;–dev為是否啟用開發(fā)者模式(默認(rèn)為false);–d是要發(fā)布更新的環(huán)境分Production與Staging(默認(rèn)為Staging);–des為更新說明;–m 是強(qiáng)制更新
          1. 通過code-push release發(fā)布更新(收藏)
          1. 應(yīng)用創(chuàng)建時(shí)有兩個(gè)環(huán)境,一個(gè)是Staging,一個(gè)是Production,開發(fā)階段用Staging,開發(fā)完成可以用code-push promote 將應(yīng)用遷移到Production中
          1. code-push patch 應(yīng)用名 Production -r 100%
          1. code-push promote RNCodePush-iOS Staging Production -r 20 將Staging 推到 Production 推20%的用戶。
  • 相關(guān)命定5

      1. code-push deployment add 部署
      1. code-push deployment rename 重命名
      1. code-push deployment rm 刪除部署
      1. code-push deployment ls 列出應(yīng)用的部署情況
      1. code-push deployment ls -k 查看部署的key
      1. code-push deployment history <AppName> 查看歷史版本(Production 或者 Staging)
      1. code-push deployment clear <appName> Production or Staging // 清除歷史部署記錄
      1. code-push rollback RNCodePush-ANdroid Staging --targetRelease v4 回滾到自定版本
  • Install Metrics(安裝指標(biāo))

    • Active:成功安裝并運(yùn)行當(dāng)前release的用戶的數(shù)量,即表示當(dāng)前下載更新部署的活躍用戶數(shù)量,of 左邊數(shù)會(huì)隨著用戶安裝、卸載而 增加、減少。of右邊數(shù)代表當(dāng)前安裝或收到部署版本的用戶數(shù),當(dāng)有用戶卸載App,該數(shù)值會(huì)降低。 因此它很好的解釋了當(dāng)前更新包有多少活躍用戶,多少用戶接收過這個(gè)安裝包
    • Total:成功安裝部署當(dāng)前release的用戶量,只增不減
    • Pending:當(dāng)前release版本被下載的數(shù)量,但是還沒有被安裝,該值會(huì)隨著用戶下載安裝后增加, 在卸載時(shí)降低。
  • 更新規(guī)則


來自網(wǎng)絡(luò)

你APP內(nèi)plist文件寫的版本號(hào)可能是1.0.0,所以你的reactjs打包上傳的版本也要是1.0.0(而不是1.0.1這樣遞增),你需要和APP保持一致,然后服務(wù)器會(huì)根據(jù)你最新上傳的且和APP一樣的版本作為最新版。

范圍表達(dá)式

* 1.2.3 僅僅只有1.2.3的版本

* *所有版本

* 1.2.x 主要版本1,次要版本2的任何修補(bǔ)程序版本

* 1.2.3 - 1.2.7 1.2.3版本到1.2.7版本

* >=1.2.3 <1.2.7 大于等于1.2.3版本小于1.2.7的版本

* ~1.2.3 大于等于1.2.3版本小于1.3.0的版本

* ^1.2.3 大于等于1.2.3版本小于2.0.0的版本 

相關(guān)代碼5.4


//通知CodePush,一個(gè)更新安裝好了。當(dāng)你檢查并安裝更新,(比如沒有使用sync方法去handle的時(shí)候),這個(gè)方法必須被調(diào)用。否則CodePush會(huì)認(rèn)為update失敗,并rollback當(dāng)前版本,在app重啟時(shí)。 
當(dāng)使用sync方法時(shí),不需要調(diào)用本方法,因?yàn)閟ync會(huì)自動(dòng)調(diào)用,我沒有調(diào)用,還是加上了
--------------------- 
作者:CrazyCodeBoy 
來源:CSDN 
原文:https://blog.csdn.net/fengyuzhengfan/article/details/52003798 
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
public componentDidMount () {
    // 必須要刷新
    CodePush.notifyAppReady()
  } 

CodePush.sync(
    options: Object, 
    syncStatusChangeCallback: function(syncStatus: Number), 
    downloadProgressCallback: function(progress: DownloadProgress)
): Promise<Number>;
傳入三個(gè)參數(shù)
1. options = { installMode: CodePush.InstallMode.IMMEDIATE, updateDialog: true }
    installMode (codePush.InstallMode): 安裝模式,用在向CodePush推送更新時(shí)沒有設(shè)置強(qiáng)制更新(mandatory為true)的情況下,默認(rèn)codePush.InstallMode.ON_NEXT_RESTART即下一次啟動(dòng)的時(shí)候安裝。
    mandatoryInstallMode (codePush.InstallMode):強(qiáng)制更新,默認(rèn)codePush.InstallMode.IMMEDIATE
    updateDialog (UpdateDialogOptions) :可選的,更新的對(duì)話框,默認(rèn)是null,包含以下屬性
        appendReleaseDescription (Boolean) - 是否顯示更新description,默認(rèn)false
        descriptionPrefix (String) - 更新說明的前綴。 默認(rèn)是” Description: “
         mandatoryContinueButtonLabel (String) - 強(qiáng)制更新的按鈕文字. 默認(rèn) to “Continue”.
        mandatoryUpdateMessage (String) - 強(qiáng)制更新時(shí),更新通知. Defaults to “An update is available that must be installed.”.
        optionalIgnoreButtonLabel (String) - 非強(qiáng)制更新時(shí),取消按鈕文字. Defaults to “Ignore”.
        optionalInstallButtonLabel (String) - 非強(qiáng)制更新時(shí),確認(rèn)文字. Defaults to “Install”.
        optionalUpdateMessage (String) - 非強(qiáng)制更新時(shí),更新通知. Defaults to “An update is available. Would you like to install it?”.
        title (String) - 要顯示的更新通知的標(biāo)題. Defaults to “Update available”.
        具體可以查看我上面的代碼:
        還有一個(gè)是:codePush.InstallMode,有三種模式,
            一個(gè)是立即啟動(dòng),nstallMode.IMMEDIATE 
            一個(gè)是下次啟動(dòng)安裝:InstallMode.ON_NEXT_RESTART
            一個(gè)是程序在前臺(tái),并沒有從后臺(tái)切換到前臺(tái)的情況下用的InstallMode.ON_NEXT_RESUME
2.狀態(tài)
3.進(jìn)度

iOS配置時(shí)問題

1.  TARGETS->Build Settings->Header Search Paths-> 添加
$(SRCROOT)/../node_modules/react
$(SRCROOT)/../node_modules/react-native-code-push (可不加)

2. 'React/RCTEventEmitter.h' file not found
  1. Disable the parallel builds:
        - xCode menu -> Product -> Scheme -> Manage Shemes...
        - Double click on your application
        - Build tab -> clear the tick on Pallelize Build
        - Add react as a project dependecy

  2. xCode Project Navigator -> drag React.xcodeproj from Libraries to root tree
      - Build Phases Tab -> Target Dependencies -> + -> add React

安裝簽名

    keytool -genkey -v -keystore my-release-key.keystore  -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
    注意上面的my-release-key這個(gè)名字可以自己取名,同時(shí)my-key-alias也是自己取名,其中第二個(gè)名稱alias參數(shù)后邊的別名,在后面你在為應(yīng)用簽名的時(shí)候需要用到,所以暫時(shí)記錄一下這個(gè)別名
    添加簽名
    signingConfigs {
            release {
                storeFile file('../keystores/rn-test.keystore')
                storePassword 'name'
                keyAlias 'name'
                keyPassword 'name'
            }
        }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
    
    ./gradlew assembleDebug 編譯并打Debug包
    ./gradlew assemblexiaomiDebug 編譯并打xiaomi的debug包,其他類似
    ./gradlew assembleRelease 編譯并打Release的包
    ./gradlew assemblexiaomiRelease 編譯并打xiaomi的Release包,其他類似
    ./gradlew installRelease Release模式打包并安裝
    ./gradlew uninstallRelease 卸載Release模式包


React-Native 篇

七分設(shè)計(jì)感的純React-Native項(xiàng)目Mung

一個(gè)完整小巧的Redux全家桶項(xiàng)目

react-native拖拽排序

多功能React-Native-Toast組件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容