checkVersion.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import config from './update_config.js';
  2. /**
  3. * 对比版本号,如需要,请自行修改判断规则
  4. * 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的
  5. * @param {Object} v1
  6. * @param {Object} v2
  7. * v1 > v2 return 1
  8. * v1 < v2 return -1
  9. * v1 == v2 return 0
  10. */
  11. function compare(v1 = '0', v2 = '0') {
  12. v1 = String(v1).split('.')
  13. v2 = String(v2).split('.')
  14. const minVersionLens = Math.min(v1.length, v2.length);
  15. let result = 0;
  16. for (let i = 0; i < minVersionLens; i++) {
  17. const curV1 = Number(v1[i])
  18. const curV2 = Number(v2[i])
  19. if (curV1 > curV2) {
  20. result = 1
  21. break;
  22. } else if (curV1 < curV2) {
  23. result = -1
  24. break;
  25. }
  26. }
  27. if (result === 0 && (v1.length !== v2.length)) {
  28. const v1BiggerThenv2 = v1.length > v2.length;
  29. const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
  30. for (let i = minVersionLens; i < maxLensVersion.length; i++) {
  31. const curVersion = Number(maxLensVersion[i])
  32. if (curVersion > 0) {
  33. v1BiggerThenv2 ? result = 1 : result = -1
  34. break;
  35. }
  36. }
  37. }
  38. return result;
  39. }
  40. /**
  41. * 检测升级 使用说明
  42. * 1. 通过请求获取后台返回的更新信息
  43. * 2. 获取后台更新信息后 和 应用本身的版本(manifest.json里的versionName)做对比。
  44. * 3. 如果后台版本比应用本身的版本大 且 后台本次更新的平台里含有 用户的系统环境则触发更新,否则一律不触发更新。
  45. */
  46. export default function checkVersion() {
  47. return new Promise((resolve, reject) => {
  48. // #ifdef APP-PLUS
  49. uni.getSystemInfo({
  50. success: (info) => {
  51. // app系统环境
  52. let appPlatform = info.platform;
  53. console.log("appPlatform", appPlatform)
  54. let channel = plus.runtime.channel;
  55. // 获取本机版本号
  56. plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
  57. // 请补充这个请求即可正常使用
  58. uni.request({
  59. url: 'https://e.yujianmate.com/Gapi/Index/updateWgt?skey=' +
  60. getApp().globalData.skey + "&version=" + wgtinfo
  61. .versionCode + "&channel=" + channel,
  62. success: (res => {
  63. res = res.data;
  64. console.log("res22", res)
  65. if (compare(res.version, wgtinfo.version) ===
  66. 1 && res.platform.indexOf(appPlatform) !== -
  67. 1) {
  68. res.appPlatform = appPlatform;
  69. resolve(res);
  70. } else {
  71. reject('当前版本已经是最新的,不需要更新')
  72. }
  73. }),
  74. fail: (err) => {
  75. reject(err);
  76. }
  77. })
  78. });
  79. }
  80. });
  81. // #endif
  82. })
  83. }