app.upload.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /**
  2. * 作者:王成
  3. * 创建日期:2022年10月31日
  4. * 操作系统:MAC
  5. * 描述:App更新脚本
  6. */
  7. /**
  8. * App升级
  9. */
  10. function appUpload() {
  11. getConfigInfo(function(appInfo) {
  12. /* 开始联网检查 */
  13. asyncCheckAppVerison(appInfo);
  14. })
  15. }
  16. /**
  17. * 远程检查App版本信息
  18. * @param {JSON} appInfo App信息
  19. */
  20. function asyncCheckAppVerison(appInfo) {
  21. sendAjax({
  22. url: 'appQueryVersion',
  23. waitMessage: '版本检查...',
  24. success: function(resData) {
  25. var resVersionCode = resData[0].versionCode;
  26. if (parseInt(resVersionCode) > parseInt(appInfo.versionCode)) {
  27. /* 需要升级 */
  28. var msg = "检测到新版本:" + resData[0].versionName + ",是否现在更新?";
  29. muiConfirm(msg, '升级', function() {
  30. console.log(resData[0].appDownloadUrl);
  31. downloadAppFile(resData[0].appDownloadUrl, resData[0].appName);
  32. });
  33. } else {
  34. var msg = "App版本:" + appInfo.version + "已是最新!";
  35. muiAlert(msg, "提示");
  36. }
  37. },
  38. error: function(err) {
  39. muiAlertError(err);
  40. }
  41. })
  42. }
  43. /* 下载任务 */
  44. var downloadTask = undefined;
  45. var downloadFileName = undefined;
  46. var downloadPath = "_doc/update/";
  47. /**
  48. * 下载需要的Apk文件
  49. * @param {string} fileUrl 文件下载地址
  50. * @param {string} fileName 下载的文件名称
  51. */
  52. function downloadAppFile(fileUrl, fileName) {
  53. downloadFileName = fileName;
  54. /* 检查现在的文件是否存在 */
  55. checkFileExists({
  56. url: downloadPath + downloadFileName + ".apk",
  57. success: function(entry) {
  58. deleteFile({
  59. entry: entry,
  60. success: function() {
  61. beginDownloadFile(fileUrl);
  62. },
  63. error: function() {
  64. muiAlertError("安装包处理异常,请联系管理员!");
  65. }
  66. })
  67. },
  68. error: function(err) {
  69. console.log("文件不存在,直接下载!");
  70. beginDownloadFile(fileUrl);
  71. }
  72. })
  73. }
  74. /**
  75. * 开始下载文件
  76. * @param {string} fileUrl 下载文件的网络路径
  77. */
  78. function beginDownloadFile(fileUrl) {
  79. /* 创建下载任务 */
  80. downloadTask = plus.downloader.createDownload(fileUrl, {
  81. filename: downloadPath,
  82. }, function(d, status) {
  83. if (status == 200) {
  84. /* 下载成功 调用安装 */
  85. installApp(d.filename);
  86. //console.log(d.filename);
  87. } else {
  88. muiAlertError("升级文件下载失败,请联系管理员!");
  89. }
  90. });
  91. /* 挂接事件 */
  92. downloadTask.addEventListener('statechanged', onStateChange, false);
  93. downloadTask.start();
  94. }
  95. /**
  96. * 检测文件是否存在
  97. * @param {JSON} options 配置项
  98. */
  99. function checkFileExists(options) {
  100. mui.plusReady(function() {
  101. plus.io.resolveLocalFileSystemURL(options.url, function(entry) {
  102. if (entry.isFile) {
  103. if (options.success) options.success(entry);
  104. } else {
  105. if (options.error) options.error("非文件");
  106. }
  107. }, function(err) {
  108. if (options.error) options.error(err);
  109. });
  110. });
  111. }
  112. /**
  113. * 删除文件
  114. * @param {JSON} options 配置项
  115. */
  116. function deleteFile(options) {
  117. options.entry.remove(function(entry) {
  118. if (options.success) options.success();
  119. }, function(err) {
  120. if (options.error) options.error(err);
  121. });
  122. }
  123. /**
  124. * 安装应用
  125. * @param {string} filePath apk文件路径
  126. */
  127. function installApp(filePath) {
  128. mui.plusReady(function() {
  129. console.log("安装文件:" + filePath);
  130. plus.runtime.install(filePath, {
  131. force: true, //强制安装
  132. }, function() {
  133. muiAlert("应用更新完成!", "敬告", function() {
  134. plus.runtime.restart();
  135. });
  136. }, function(e) {
  137. muiAlertError("应用更新失败[" + e.code + "]:" + e.message);
  138. });
  139. })
  140. }
  141. /**
  142. * 下载状态监听
  143. * @param {Object} download 下载任务对象
  144. * @param {number} status 状态值
  145. */
  146. function onStateChange(download, status) {
  147. // console.log("当前下载状态 = " + status);
  148. switch (download.state) {
  149. case undefined:
  150. muiShowWaitLoading("准备中...");
  151. break;
  152. case 0:
  153. muiShowWaitLoading("请求下载...");
  154. break;
  155. case 3:
  156. var size = download.downloadedSize;
  157. var total = download.totalSize;
  158. var msg = "[" + downloadFileName + "]文件下载中,进度 " + ((parseFloat(size) / parseFloat(total)) * 100)
  159. .toFixed(
  160. 2) + "%";
  161. muiShowWaitLoading(msg);
  162. break;
  163. case 4:
  164. muiCloseWaitLoading();
  165. break;
  166. }
  167. }