2025-03-18 08:46:50 +08:00

304 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*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.14wgtInfo.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
});
});
}
});
}
});
}