前言
用react-native(一下简称RN)开发的app的更新方案有很多,其中比较火的是热更新方案,有官方推荐的pushy和微软的code-push
文档很详细,接入也比较简单
这里主要介绍一种最传统的更新方案,也是很多原生开发在使用的方案——全量更新
全量更新
顾名思义,即每次更新通过http去下载新版本包去然后去做一个覆盖安装,这种做法在更新迭代中会避免很多不必要的麻烦,而且在这个5G都要到来的时代,网络资源大小的限制也显得不那么重要。
步骤
获取当前APP版本号
react-native是不提供获取版本号模块的,所以我们需要自己去写一个原生模块去获取当前app的版本号。
传送门:原生模块
新建一个模块文件夹
新建一个文件夹在android/app/src/main/java/com/your-app-name/下,这里我取名叫appinfo
新建一个类
在appinfo新建一个类为AppInfoModule.java
package com.your-app-name.appinfo;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;
import com.facebook.react.uimanager.IllegalViewOperationException;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import java.util.Map;
import java.util.HashMap;
public class AppInfoModule extends ReactContextBaseJavaModule {
public AppInfoModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "AppInfo"; //后面需要调用的模块名
}
@ReactMethod
public void getVersion(Callback successCallback) {
//后面需要调用的方法名,不需要传参
try {
PackageInfo info = getPackageInfo();
if(info != null){
successCallback.invoke(info.versionName); //这里我是一回调函数的形式返回,也可以用promise的方式
} else {
successCallback.invoke("");
}
} catch (IllegalViewOperationException e){
successCallback.invoke("");
}
}
private PackageInfo getPackageInfo(){
PackageManager manager = getReactApplicationContext().getPackageManager();
PackageInfo info = null;
try{
info = manager.getPackageInfo