下面介绍一个React Native的一个插件CodePush,可进行应用内版本更新。
该插件是微软针对开发者提供的一个工具。项目详细地址请戳项目github
在使用时,请注意按照文档流程来做,同时RN版本需要是>=0.15。低版本RN该组件目前支持还有一些问题,同时开发者已不准备支持低版本了。
安装
1) iOS平台安装
npm install react-native-code-push 将node_modules/react-native-code-push中的CodePush.xcodeproj添加至Xcode中的Libraries里。 在Build Phases中添加libCodePush.a和libz.tbd 设置Header Search Paths配置,添加$(SRCROOT)/../node_modules/react-native-code-push
2) Android平台安装
react-native link react-native-code-push 注:此link后还会有些问题。需要修改settings.gradle中为: project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')
程序调用
在程序调用前,需要用code-push
创建应用。建议创建2个,分别针对iOS和Android平台。
1) iOS上调用
在AppDelegate.m中导入CodePush.h同时修改jsCodeLocation为[CodePush bundleURL]
这里需要先用code-push命令创建应用。创建后会有应用的Deployment Key。该值需要在Info.plist中进行设置。在info.plist中添加CodePushDeploymentKey并设置内容为上述的key值。也需要在Info.plilst中添加bundleVersion值,需要具体指定到很小的版本号,如1.0.10.
2) Android上调用
在link之后,已经会将需要的包和处理方式导入到MainActivity.java
中了。如果没有code-push
相关的代码。则手动导入。
import com.microsoft.codepush.react.CodePush;@Override protected void onCreate(Bundle savedInstanceState) { ... // 初始化信息 CodePush codePush = new CodePush("xxx", this, BuildConfig.DEBUG); ... mReactInstanceManager = ReactInstanceManager.builder() .setApplication(getApplication()) ... // 原来这行 --> .setBundleAssetName("index.android.bundle") // 修改成如下: .setJSBundleFile(codePush.getBundleUrl("index.android.bundle")) // 导入模块 .addPackage(codePush.getReactPackage())
修改android/app/build.gradle
目录中的版本信息为:
android { ... defaultConfig { ... versionName "1.0.10" ... } ... }
升级操作
分别创建了两个CodePush应用:MyDemo(iOS平台)和MyDemo-android(Android平台)。
对应的目录release和release_android需要先创建.
mkdir release release_android
1) iOS升级
react-native bundle --platform ios --entry-file index.ios.js --bundle-output ./release/main.jsbundle --assets-dest ./release --dev falsecode-push release MyDemo ./release/main.jsbundle 1.0.10 注意:后面的1.0.10需要在bundleVersion里填写,同时后续更新的时候该条命令的版本号不可更新,这样移动端应用内更新才能有效。
2) Android升级
react-native bundle --platform android --entry-file index.android.js --bundle-output ./release_android/main.jsbundle --assets-dest ./release_android --dev falsecode-push release MyDemo-android ./release_android/main.jsbundle 1.0.10
注意打包的目录也不一样。会涉及到静态资源问题。
在RN中可以用JS做以下操作
chekForUpdate 检查是否有新版 getCurrentPackage 获取当前安装的包 notifyApplicationReady 告知应用已准备好 restartApp 重启应用,下载包立即安装时会用到 sync 异步下载新的安装包,可设置是否立即安装等。
除了微软的这个组件。也可以用AppHub管理版本。AppHub是一个收费的管理平台,针对RN、cordova等类型的应用。
作者:巨巨
链接:https://www.jianshu.com/p/07219e8dcdea