React Native 热更新

2018-11-12  本文已影响153人  Bana

热更新库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
查看codepush的KEY

6.在Xcode中填写你的key


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 就是你要进行热更新的版本

WX20181112-152536@2x.png
上一篇下一篇

猜你喜欢

热点阅读