check-update.js 3.4 KB

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