check-update.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import callCheckVersion from './call-check-version'
  2. // 推荐再App.vue中使用
  3. const PACKAGE_INFO_KEY = '__package_info__'
  4. export default function () {
  5. // #ifdef APP-PLUS
  6. return new Promise((resolve, reject) => {
  7. callCheckVersion().then(async (e) => {
  8. if (!e.result) return;
  9. const {
  10. code,
  11. message,
  12. is_silently, // 是否静默更新
  13. url, // 安装包下载地址
  14. platform, // 安装包平台
  15. type // 安装包类型
  16. } = e.result;
  17. // 此处逻辑仅为实例,可自行编写
  18. if(code == 501){
  19. if(!!message){
  20. uni.showToast({ title: message, icon:"none",duration:2000 });
  21. }
  22. setTimeout(() => {
  23. plus.runtime.quit();
  24. }, 1000);
  25. }else if (code > 0) {
  26. // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
  27. const {
  28. fileList
  29. } = await uniCloud.getTempFileURL({
  30. fileList: [url]
  31. });
  32. e.result.url = fileList[0].tempFileURL
  33. resolve(e)
  34. // 静默更新,只有wgt有
  35. if (is_silently) {
  36. uni.downloadFile({
  37. url: e.result.url,
  38. success: res => {
  39. if (res.statusCode == 200) {
  40. // 下载好直接安装,下次启动生效
  41. plus.runtime.install(res.tempFilePath, {
  42. force: false
  43. });
  44. }
  45. }
  46. });
  47. return;
  48. }
  49. /**
  50. * 提示升级一
  51. * 使用 uni.showModal
  52. */
  53. // return updateUseModal(e.result)
  54. /**
  55. * 提示升级二
  56. * 官方适配的升级弹窗,可自行替换资源适配UI风格
  57. */
  58. uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
  59. uni.navigateTo({
  60. url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
  61. fail: (err) => {
  62. console.error('更新弹框跳转失败', err)
  63. uni.removeStorageSync(PACKAGE_INFO_KEY)
  64. }
  65. })
  66. } else if (code < 0) {
  67. // TODO 云函数报错处理
  68. console.error(message)
  69. reject(e)
  70. }
  71. }).catch(err => {
  72. // TODO 云函数报错处理
  73. console.error(err.message)
  74. reject(err)
  75. })
  76. });
  77. // #endif
  78. }
  79. /**
  80. * 使用 uni.showModal 升级
  81. */
  82. function updateUseModal(packageInfo) {
  83. const {
  84. title, // 标题
  85. contents, // 升级内容
  86. is_mandatory, // 是否强制更新
  87. url, // 安装包下载地址
  88. platform, // 安装包平台
  89. type // 安装包类型
  90. } = packageInfo;
  91. let isWGT = type === 'wgt'
  92. let isiOS = !isWGT ? platform.includes('iOS') : false;
  93. let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
  94. return uni.showModal({
  95. title,
  96. content: contents,
  97. showCancel: !is_mandatory,
  98. confirmText,
  99. success: res => {
  100. if (res.cancel) return;
  101. // 安装包下载
  102. if (isiOS) {
  103. plus.runtime.openURL(url);
  104. return;
  105. }
  106. uni.showToast({
  107. title: '后台下载中……',
  108. duration: 1000
  109. });
  110. // wgt 和 安卓下载更新
  111. downloadTask = uni.downloadFile({
  112. url,
  113. success: res => {
  114. if (res.statusCode !== 200) {
  115. console.error('下载安装包失败', err);
  116. return;
  117. }
  118. // 下载好直接安装,下次启动生效
  119. plus.runtime.install(res.tempFilePath, {
  120. force: false
  121. }, () => {
  122. if (is_mandatory) {
  123. //更新完重启app
  124. plus.runtime.restart();
  125. return;
  126. }
  127. uni.showModal({
  128. title: '安装成功是否重启?',
  129. success: res => {
  130. if (res.confirm) {
  131. //更新完重启app
  132. plus.runtime.restart();
  133. }
  134. }
  135. });
  136. }, err => {
  137. uni.showModal({
  138. title: '更新失败',
  139. content: err
  140. .message,
  141. showCancel: false
  142. });
  143. });
  144. }
  145. });
  146. }
  147. });
  148. }