| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- /**
- * @description 检查app版本是否需要升级
- * @param name:最新版本名称
- * @param code:最新版本号
- * @param content:更新内容
- * @param url:下载链接
- * @param forceUpdate:是否强制升级
- */
- export const checkVersion = ({
- name, //最新版本名称
- code, //最新版本号
- content, //更新内容
- url, //下载链接
- forceUpdate, //是否强制升级
- }) => {
- const selfVersionCode = uni.getAppBaseInfo().appVersion; // uni.getSystemInfoSync().appVersion; //当前App版本号
- // console.log('selfVersionCode-getAppBaseInfo', uni.getAppBaseInfo())
- console.log("selfVersionCode1", selfVersionCode);
- //线上版本号高于当前,进行在线升级
- if (code > selfVersionCode) {
- let platform = uni.getSystemInfoSync().platform; //手机平台
- console.log("platform", platform);
- //安卓手机弹窗升级
- if (platform === "android") {
- //当前页面不是升级页面跳转防止多次打开
- uni.$emit("upgrade-app", {
- name,
- content,
- url,
- forceUpdate,
- });
- return true;
- }
- //IOS无法在线升级提示到商店下载
- else {
- uni.showModal({
- title: "发现新版本 V" + name,
- content: "请到App store进行升级",
- showCancel: false,
- });
- }
- }
- };
- //获取当前页面url
- const getCurrentPageRoute = () => {
- let currentRoute;
- let pages = getCurrentPages(); // 获取栈实例
- if (pages && pages.length) {
- currentRoute = pages[pages.length - 1].route;
- }
- return currentRoute;
- };
- /**
- * @description H5+下载App
- * @param downloadUrl:App下载链接
- * @param progressCallBack:下载进度回调
- */
- export const downloadApp = (downloadUrl, progressCallBack = () => {}) => {
- console.log("🚀 ~ downloadApp ~ downloadUrl:", downloadUrl);
- // 将模拟进度变量移到事件监听外部,确保状态能累积
- let mockProgress = 0;
- // 进度更新节流控制变量
- let lastProgressTime = 0;
- const PROGRESS_INTERVAL = 300; // 限制300ms内最多更新一次进度
-
- return new Promise((resolve, reject) => {
- // 创建下载任务
- const downloadTask = plus.downloader.createDownload(
- downloadUrl,
- { method: "GET" },
- (task, status) => {
- console.log("🚀 ~ returnnewPromise ~ task, status:", task, status);
- if (status == 200) {
- resolve(task.filename);
- } else {
- reject("fail");
- uni.showToast({
- title: "下载失败",
- duration: 1500,
- icon: "none",
- });
- }
- }
- );
- downloadTask.addEventListener("statechanged", (task, status) => {
- // 获取当前时间戳用于节流控制
- const now = Date.now();
- switch (task.state) {
- case 1: // 开始
- mockProgress = 0; // 仅在开始时重置
- progressCallBack(0, 0, task.totalSize || 0);
- break;
- case 2: // 已连接到服务器
- break;
- case 3: // 已接收到数据
- const hasProgress = task.totalSize && task.totalSize > 0;
- if (hasProgress) {
- mockProgress = 0;
- const current = parseInt((100 * task.downloadedSize) / task.totalSize);
- progressCallBack(current, task.downloadedSize, task.totalSize);
- } else {
- // 模拟进度:添加节流控制和平滑增长
- if (mockProgress < 95 && (now - lastProgressTime > PROGRESS_INTERVAL)) {
- // 根据时间间隔动态调整增长速度,避免停滞感
- const baseIncrement = 1;
- const maxIncrement = mockProgress < 30 ? 3 : mockProgress < 60 ? 2 : 1;
- const increment = Math.floor(Math.random() * maxIncrement) + baseIncrement;
- mockProgress = Math.min(mockProgress + increment, 95);
- lastProgressTime = now; // 更新最后更新时间
- progressCallBack(mockProgress, task.downloadedSize, 0);
- }
- }
- break;
- case 4: // 下载完成
- progressCallBack(100, task.downloadedSize, task.totalSize || 0);
- break;
- }
- });
- downloadTask.start();
- });
- };
- /**
- * @description H5+安装APP
- * @param fileName:app文件名
- * @param callBack:安装成功回调
- */
- export const installApp = (fileName, callBack = () => {}) => {
- console.log("🚀 ~ installApp ~ fileName:", fileName);
- //注册广播监听app安装情况
- onInstallListening(callBack);
- //开始安装
- plus.runtime.install(
- plus.io.convertLocalFileSystemURL(fileName),
- {},
- () => {
- //成功跳转到安装界面
- },
- function (error) {
- console.log("🚀 ~ plus.runtime.install ~ error:", error);
- uni.showToast({
- title: "安装失败",
- duration: 1500,
- icon: "none",
- });
- }
- );
- };
- /**
- * @description 注册广播监听APP是否成功
- * @param callBack:安装成功回调函数
- */
- const onInstallListening = (callBack = () => {}) => {
- let mainActivity = plus.android.runtimeMainActivity(); //获取activity
- //生成广播接收器
- let receiver = plus.android.implements(
- "io.dcloud.android.content.BroadcastReceiver",
- {
- onReceive: (context, intent) => {
- //接收广播回调
- plus.android.importClass(intent);
- mainActivity.unregisterReceiver(receiver); //取消监听
- callBack();
- },
- }
- );
- let IntentFilter = plus.android.importClass("android.content.IntentFilter");
- let Intent = plus.android.importClass("android.content.Intent");
- let filter = new IntentFilter();
- filter.addAction(Intent.ACTION_PACKAGE_ADDED); //监听apk安装
- filter.addDataScheme("package");
- mainActivity.registerReceiver(receiver, filter); //注册广播
- };
|