304 lines
7.7 KiB
JavaScript
304 lines
7.7 KiB
JavaScript
/*
|
||
*unielepy应用初始化文件
|
||
*author:lybbn
|
||
*source code:https://gitee.com/lybbn/unielepy
|
||
*program:unielepy
|
||
*/
|
||
import {upgradeApp} from '@/api/api.js'
|
||
const PACKAGE_UPDATE_KEY = '__unielepy_package_update__'
|
||
const PACKAGE_INFO_KEY = '__unielepy_package_info__'
|
||
const is_check_app_upgrade = false //是否检查APP更新
|
||
const is_silently = false //app的wgt更新是否静默安装
|
||
const is_mandatory = false //app更新是否强制更新
|
||
// #ifdef APP-PLUS
|
||
import interceptorChooseImage from '@/components/json-interceptor-chooseImage/js_sdk/main.js';
|
||
// #endif
|
||
export default async function() {
|
||
//应用初始化
|
||
// #ifdef APP-PLUS
|
||
plus.screen.lockOrientation('portrait-primary'); //竖屏正方向锁定
|
||
if(is_check_app_upgrade){
|
||
//热更新
|
||
const updated = uni.getStorageSync(PACKAGE_UPDATE_KEY); // 尝试读取storage
|
||
console.log("正在检测app版本更新...")
|
||
if (updated.completed === true) {
|
||
// 如果上次刚更新过
|
||
// 删除安装包及安装记录
|
||
console.log('安装记录被删除,更新成功');
|
||
uni.removeSavedFile({
|
||
filePath: updated.packgePath,
|
||
success: res => {
|
||
uni.removeStorageSync(PACKAGE_UPDATE_KEY);
|
||
}
|
||
});
|
||
} else if (updated.completed === false) {
|
||
uni.removeStorageSync(PACKAGE_UPDATE_KEY);
|
||
plus.runtime.install(updated.packgePath, {
|
||
force: true
|
||
});
|
||
uni.setStorage({
|
||
key: PACKAGE_UPDATE_KEY,
|
||
data: {
|
||
completed: true,
|
||
packgePath: updated.packgePath
|
||
},
|
||
success: res => {
|
||
console.log('成功安装上次的更新,应用需要重启才能继续完成');
|
||
}
|
||
});
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '应用将重启以完成更新',
|
||
showCancel: false,
|
||
complete: () => {
|
||
plus.runtime.restart();
|
||
}
|
||
});
|
||
}else{
|
||
// 初始化appVersion(检查当前版本信息并尝试更新--仅app生效)
|
||
initAppVersion();
|
||
}
|
||
}
|
||
|
||
// 实现,路由拦截。当应用无访问摄像头/相册权限,引导跳到设置界面
|
||
interceptorChooseImage()
|
||
|
||
// 监听并提示设备网络状态变化
|
||
uni.onNetworkStatusChange(res => {
|
||
console.log(res.isConnected);
|
||
console.log(res.networkType);
|
||
if (res.networkType != 'none') {
|
||
uni.showToast({
|
||
title: '当前网络类型:' + res.networkType,
|
||
icon: 'none',
|
||
duration: 3000
|
||
})
|
||
} else {
|
||
uni.showToast({
|
||
title: '网络类型:' + res.networkType,
|
||
icon: 'none',
|
||
duration: 3000
|
||
})
|
||
}
|
||
});
|
||
// #endif
|
||
}
|
||
/**
|
||
* // 初始化appVersion并尝试更新版本
|
||
*/
|
||
function initAppVersion() {
|
||
// #ifdef APP-PLUS
|
||
let appid = plus.runtime.appid;
|
||
plus.runtime.getProperty(appid, (wgtInfo) => {
|
||
let appVersion = plus.runtime;//appVersion.version为基座版本如:13.4.14,wgtInfo.version为app版本号:如1.0.0
|
||
let currentVersion = wgtInfo.version;
|
||
getApp().globalData.appVersion = currentVersion
|
||
let platform = plus.os.name.toLowerCase() === 'android' ? 'android' : 'ios'
|
||
var formdata = {
|
||
appid:appid,
|
||
version:currentVersion,
|
||
platform:platform,
|
||
}
|
||
// 检查服务器端版本号
|
||
upgradeApp().then(res => {
|
||
res = {
|
||
data:{
|
||
version:'2.0.0',
|
||
androidWgtUrl:"http://www.lybbn.cn",
|
||
iosWgtUrl:"http://www.lybbn.cn",
|
||
wgtUrl:"http://www.lybbn.cn",
|
||
}
|
||
}
|
||
checkVersionToUgrade(res.data.version,currentVersion,res.data)
|
||
// console.log('检查是否有可以更新的版本', res);
|
||
if (res.code == 2000) {
|
||
// 判断是否更新
|
||
// res = {
|
||
// data:{
|
||
// version:'2.0.0',
|
||
// androidWgtUrl:"http://www.lybbn.cn",
|
||
// iosWgtUrl:"http://www.lybbn.cn",
|
||
// }
|
||
// }
|
||
// checkVersionToUgrade(res.data.version,currentVersion,res.data)
|
||
}else{
|
||
console.log("获取app版本信息失败")
|
||
}
|
||
})
|
||
});
|
||
// 检查更新
|
||
// #endif
|
||
}
|
||
|
||
/**
|
||
* 对比版本号,并更新app
|
||
* @param {Object} server_version 服务器端最新的版本号
|
||
* @param {Object} current_version 当前应用的版本号
|
||
* @param {Object} data 服务器返回的数据
|
||
*/
|
||
function checkVersionToUgrade(server_version, current_version,res) {
|
||
//如果有更新
|
||
const has_new = compare(server_version,current_version)
|
||
if(has_new==1){
|
||
//服务器返回更新内容
|
||
const upgrade_result = {
|
||
title:"升级标题", // 标题
|
||
contents:"升级内容", // 升级内容
|
||
is_mandatory:true, // 是否强制更新
|
||
url:"http://www.lybbn.cn", // 安装包下载地址
|
||
platform:"android", // 安装包平台
|
||
type:"wgt", // 安装包类型
|
||
}
|
||
// 静默更新,只有wgt有
|
||
if (is_silently) {
|
||
uni.downloadFile({
|
||
url: upgrade_result.url,
|
||
success: res => {
|
||
if (res.statusCode == 200) {
|
||
// 下载好直接安装,下次启动生效
|
||
plus.runtime.install(res.tempFilePath, {
|
||
force: false
|
||
});
|
||
}
|
||
}
|
||
});
|
||
return;
|
||
}
|
||
/**
|
||
* 提示升级一
|
||
* 使用 uni.showModal
|
||
*/
|
||
// return updateUseModal(upgrade_result)
|
||
/**
|
||
* 提示升级二
|
||
* 官方适配的升级弹窗,可自行替换资源适配UI风格
|
||
*/
|
||
uni.setStorageSync(PACKAGE_INFO_KEY, upgrade_result)
|
||
uni.navigateTo({
|
||
url: `/pages/upgradeapp/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
|
||
fail: (err) => {
|
||
console.error('更新弹框跳转失败', err)
|
||
uni.removeStorageSync(PACKAGE_INFO_KEY)
|
||
}
|
||
})
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 对比版本号,如需要,请自行修改判断规则
|
||
* 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的
|
||
* @param {Object} v1
|
||
* @param {Object} v2
|
||
* v1 > v2 return 1
|
||
* v1 < v2 return -1
|
||
* v1 == v2 return 0
|
||
*/
|
||
function compare(v1 = '0', v2 = '0') {
|
||
v1 = String(v1).split('.')
|
||
v2 = String(v2).split('.')
|
||
const minVersionLens = Math.min(v1.length, v2.length);
|
||
|
||
let result = 0;
|
||
for (let i = 0; i < minVersionLens; i++) {
|
||
const curV1 = Number(v1[i])
|
||
const curV2 = Number(v2[i])
|
||
|
||
if (curV1 > curV2) {
|
||
result = 1
|
||
break;
|
||
} else if(curV1 < curV2) {
|
||
result = -1
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (result === 0 && (v1.length !== v2.length)) {
|
||
const v1BiggerThenv2 = v1.length > v2.length;
|
||
const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
|
||
for (let i = minVersionLens; i < maxLensVersion.length; i++) {
|
||
const curVersion = Number(maxLensVersion[i])
|
||
if (curVersion > 0) {
|
||
v1BiggerThenv2 ? result = 1 : result = -1
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* 使用 uni.showModal 升级
|
||
*/
|
||
function updateUseModal(packageInfo) {
|
||
const {
|
||
title, // 标题
|
||
contents, // 升级内容
|
||
is_mandatory, // 是否强制更新
|
||
url, // 安装包下载地址
|
||
platform, // 安装包平台
|
||
type // 安装包类型
|
||
} = packageInfo;
|
||
|
||
let isWGT = type === 'wgt'
|
||
let isiOS = !isWGT ? platform.includes('ios') : false;
|
||
let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
|
||
|
||
return uni.showModal({
|
||
title,
|
||
content: contents,
|
||
showCancel: !is_mandatory,
|
||
confirmText,
|
||
success: res => {
|
||
if (res.cancel) return;
|
||
|
||
// 安装包下载
|
||
if (isiOS) {
|
||
plus.runtime.openURL(url);
|
||
return;
|
||
}
|
||
|
||
uni.showToast({
|
||
title: '后台下载中……',
|
||
duration: 1000
|
||
});
|
||
|
||
// wgt 和 安卓下载更新
|
||
downloadTask = uni.downloadFile({
|
||
url,
|
||
success: res => {
|
||
if (res.statusCode !== 200) {
|
||
console.error('下载安装包失败', err);
|
||
return;
|
||
}
|
||
// 下载好直接安装,下次启动生效
|
||
plus.runtime.install(res.tempFilePath, {
|
||
force: false
|
||
}, () => {
|
||
if (is_mandatory) {
|
||
//更新完重启app
|
||
plus.runtime.restart();
|
||
return;
|
||
}
|
||
uni.showModal({
|
||
title: '安装成功是否重启?',
|
||
success: res => {
|
||
if (res.confirm) {
|
||
//更新完重启app
|
||
plus.runtime.restart();
|
||
}
|
||
}
|
||
});
|
||
}, err => {
|
||
uni.showModal({
|
||
title: '更新失败',
|
||
content: err
|
||
.message,
|
||
showCancel: false
|
||
});
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
} |