APP涉及到版本更新(非热更新),版本检测下载App,Android和iOS实现方式不同
1.Android直接和服务器上版本号作对比下载APK进行安装
2.iOS由于需要到AppStore进行下载应用,所以应用需要和AppStore上应用做版本对比后跳转到AppStore进行App更新
--Android
1.使用插件 rn-fetch-blob
npm install --save rn-fetch-blob //安装插件
RN0.60版本以下需要link
react-native link rn-fetch-blob //0.60+自动link
RN0.60+
cd ios
pod install //ios使用pod安装
2.功能实现
- Android需要更改原生代码获取权限按照
rn-fetch-blob
文档配置
Android6.0+需要手动获取权限
代码如下:
/***
Android6.0+获取文件权限
*/
crequestMultiplePermission = async () => {
try {
const permissions = [
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
];
const granteds = await PermissionsAndroid.requestMultiple(permissions);
if (granteds['android.permission.WRITE_EXTERNAL_STORAGE'] === 'granted') {
this.storage = true;
} else {
this.storage = false;
}
if (this.storage) return;
} catch (err) {
console.log(err);
}
};
/**
检测更新下载APP
*/
import RNFetchBlob from 'rn-fetch-blob';
Update = () => {
const android = RNFetchBlob.android;
//配置手机系统通知栏下载文件通知,下载成功后点击通知可运行apk文件
RNFetchBlob.config({
addAndroidDownloads: {
useDownloadManager: true,
title: 'update app',
description: 'An APK that will be installed',
mime: 'application/vnd.android.package-archive',
path: `${RNFetchBlob.fs.dirs.DownloadDir}/update.apk`,
mediaScannable: true,
notification: true
}
}).fetch(
'GET',
'http://gdown.baidu.com/data/wisegame/9fdb4b60017e5bf9/baidushoujizhushou_16798097.apk' //apk下载地址
).then(res => {
//下载成功后自动打开安装已下载apk文件
android.actionViewIntent(
res.path(),
'application/vnd.android.package-archive'
);
});
}
--iOS
- 将ios目录下ios_upgrade文件夹拷贝到项目目录下
代码如下:
import { NativeModules } from "react-native";
NativeModules.upgrade.upgrade("123456", msg => {
if (msg === "YES") {
// 跳转到APP Stroe
NativeModules.upgrade.openAPPStore("123456") //数字为对应的AppStore引用的ID
} else {
// TODO: 无更新
callback && callback();
}
}
网友评论