React Native 熱更新

weixin_33728268發表於2018-11-12

熱更新庫react-native-code-push

1.安裝

npm i react-native-code-push --save
react-native link react-native-code-push

2.全域性安裝code-push 命令外掛

npm install -g code-push-cli
//檢視版本
 code-push -v

3.註冊code-push賬號

//註冊賬號會跳出註冊網頁
code-push register
//授權通過之後,CodePush會告訴你“access key”,複製此key到終端即可完成登入
code-push login

PS.相關命令

code-push login  //登陸
code-push loout  //登出
code-push access-key ls  //列出登陸的token
code-push access-key rm <accessKye>  //刪除某個 access-key
code-push app ls //檢視所有app
code-push deployment history MyAPP Staging //c檢視歷史釋出版本
code-push release-react MyAPP ios //釋出到code-push Staging
code-push promote MyAPP Staging Production //從Staging釋出到正式環境
code-push release-react MyAPP ios -d Production //直接發不到正式環境
code-push deployment ls MyAPP  -k //檢視key

4.建立應用

兩種方法
(1).通過官網
(2).通過命令列

//ios
code-push app add helloworld ios react-native
//android
code-push app add helloworld android react-native

5.檢視你的deployment key

code-push deployment ls helloworld  -k
1329670-bfcc5f36562e8633.png
檢視codepush的KEY

6.在Xcode中填寫你的key


1329670-e54c649b837a235f.png
info.list

7.新增測試

code-push deployment add helloworld Test

8.程式碼中使用

import codePush from "react-native-code-push";
let codePushOptions = {checkFrequency: codePush.CheckFrequency.MANUAL};
HelloWorld = codePush(codePushOptions)(HelloWorld);
const myKey = '***'
codePush.checkForUpdate(myKey)
.then((update)=>{
  console.log('update is' , update)
  if(!update){
    Alert.alert("提示","已是最新版本--",[
      {text:"Ok", onPress:()=>{
          console.log("點了OK");
        }}
    ]);
 }else{
  codePush.sync({
    deploymentKey: myKey,
     updateDialog: {
       optionalIgnoreButtonLabel: '稍後',
       optionalInstallButtonLabel: '後臺更新',
       optionalUpdateMessage: '有新版本了,是否更新?',
       title: '更新提示'
     },
     installMode: codePush.InstallMode.IMMEDIATE
   });
 }
})

PS:注意IOS是根據info中的版本號來決定是否更新,版本獨立不影響的位數是三位
即iOS版本都是獨立不影響,version=X.Y.Z,當codepush釋出更新時,只會影響與其X.Y.Z三位數完全相同的版本,其他版本不會受影響。

打包

//在ios目錄下建立bundle目錄,在專案目錄下執行,然後在Xcode中需要把 bundle 新增在專案下
react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ./ios/bundle/index.ios.jsbundle --assets-dest ./ios/bundle
//react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

//打包到 stagging
code-push release-react helloworld ios 
//放到production下
code-push promote helloworld Staging Production

問題: 本人一直以為
如: 之前是1.0.0打包的,然後提交codepush為 v1版本,下次更新打包 1.0.1 為 v2 版本就可以了..試了半天,一直不更新.
結果:本來是1.0.0的版本,如果要進行熱更新是不需要修改 info.list的版本號的,還是以1.0.0打包上去就可以了,codepush會以打包上去的 v1,v2的更新時間進行熱更新,也就是codepush官網中的target version 就是你要進行熱更新的版本

1329670-1b4096041a1ee26c.png
WX20181112-152536@2x.png

相關文章