check-update.js 3.4 KB

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