/** * 作者:王成 * 创建日期:2022年10月31日 * 操作系统:MAC * 描述:App更新脚本 */ /** * App升级 */ function appUpload() { getConfigInfo(function(appInfo) { /* 开始联网检查 */ asyncCheckAppVerison(appInfo); }) } /** * 远程检查App版本信息 * @param {JSON} appInfo App信息 */ function asyncCheckAppVerison(appInfo) { sendAjax({ url: 'appQueryVersion', waitMessage: '版本检查...', success: function(resData) { var resVersionCode = resData[0].versionCode; if (parseInt(resVersionCode) > parseInt(appInfo.versionCode)) { /* 需要升级 */ var msg = "检测到新版本:" + resData[0].versionName + ",是否现在更新?"; muiConfirm(msg, '升级', function() { console.log(resData[0].appDownloadUrl); downloadAppFile(resData[0].appDownloadUrl, resData[0].appName); }); } else { var msg = "App版本:" + appInfo.version + "已是最新!"; muiAlert(msg, "提示"); } }, error: function(err) { muiAlertError(err); } }) } /* 下载任务 */ var downloadTask = undefined; var downloadFileName = undefined; var downloadPath = "_doc/update/"; /** * 下载需要的Apk文件 * @param {string} fileUrl 文件下载地址 * @param {string} fileName 下载的文件名称 */ function downloadAppFile(fileUrl, fileName) { downloadFileName = fileName; /* 检查现在的文件是否存在 */ checkFileExists({ url: downloadPath + downloadFileName + ".apk", success: function(entry) { deleteFile({ entry: entry, success: function() { beginDownloadFile(fileUrl); }, error: function() { muiAlertError("安装包处理异常,请联系管理员!"); } }) }, error: function(err) { console.log("文件不存在,直接下载!"); beginDownloadFile(fileUrl); } }) } /** * 开始下载文件 * @param {string} fileUrl 下载文件的网络路径 */ function beginDownloadFile(fileUrl) { /* 创建下载任务 */ downloadTask = plus.downloader.createDownload(fileUrl, { filename: downloadPath, }, function(d, status) { if (status == 200) { /* 下载成功 调用安装 */ installApp(d.filename); //console.log(d.filename); } else { muiAlertError("升级文件下载失败,请联系管理员!"); } }); /* 挂接事件 */ downloadTask.addEventListener('statechanged', onStateChange, false); downloadTask.start(); } /** * 检测文件是否存在 * @param {JSON} options 配置项 */ function checkFileExists(options) { mui.plusReady(function() { plus.io.resolveLocalFileSystemURL(options.url, function(entry) { if (entry.isFile) { if (options.success) options.success(entry); } else { if (options.error) options.error("非文件"); } }, function(err) { if (options.error) options.error(err); }); }); } /** * 删除文件 * @param {JSON} options 配置项 */ function deleteFile(options) { options.entry.remove(function(entry) { if (options.success) options.success(); }, function(err) { if (options.error) options.error(err); }); } /** * 安装应用 * @param {string} filePath apk文件路径 */ function installApp(filePath) { mui.plusReady(function() { console.log("安装文件:" + filePath); plus.runtime.install(filePath, { force: true, //强制安装 }, function() { muiAlert("应用更新完成!", "敬告", function() { plus.runtime.restart(); }); }, function(e) { muiAlertError("应用更新失败[" + e.code + "]:" + e.message); }); }) } /** * 下载状态监听 * @param {Object} download 下载任务对象 * @param {number} status 状态值 */ function onStateChange(download, status) { // console.log("当前下载状态 = " + status); switch (download.state) { case undefined: muiShowWaitLoading("准备中..."); break; case 0: muiShowWaitLoading("请求下载..."); break; case 3: var size = download.downloadedSize; var total = download.totalSize; var msg = "[" + downloadFileName + "]文件下载中,进度 " + ((parseFloat(size) / parseFloat(total)) * 100) .toFixed( 2) + "%"; muiShowWaitLoading(msg); break; case 4: muiCloseWaitLoading(); break; } }