privacyConfig.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /**
  2. * 隐私协议版本号 - 自动跟随 App/小程序版本
  3. *
  4. * 【正常流程】
  5. * 每次发版时,开发者只需要改 manifest.json 中的 versionName / versionCode,
  6. * 或者发版工具自动改版本号,隐私协议就会自动重新弹窗,无需手动调整此处。
  7. *
  8. * 【特殊兜底】
  9. * 如果协议改了但不想发新版 App,把下方 FORCE_REFRESH_FLAG 改成新值即可
  10. * (比如改成日期 '2026-10-01'),所有用户下次启动会重新弹窗。
  11. * 协议没改时保持空字符串 '' 即可。
  12. *
  13. * 各端获取版本号方式:
  14. * App 端 → plus.runtime.versionCode (manifest.json 中 versionCode)
  15. * 小程序端 → uni.getAccountInfoSync().miniProgram.version
  16. */
  17. // ====== 兜底强制刷新标志 ======
  18. // 协议变了但 App/小程序版本号没变时,改这里触发重新弹窗
  19. // 保持 '' 不额外触发;改成任意新值(如 '2026-10-01')即可强制所有用户重新同意
  20. const FORCE_REFRESH_FLAG = '';
  21. // 本地存储 key
  22. export const PRIVACY_STORAGE_KEY = 'privacy_version';
  23. // 动态获取当前运行端的版本号(含兜底标志)
  24. function getCurrentVersion() {
  25. let base = '';
  26. // #ifdef APP-PLUS
  27. // App 端:用 versionCode(数字,每次发版必变)
  28. base = 'app_' + plus.runtime.versionCode;
  29. // #endif
  30. // #ifdef MP
  31. // 小程序端:用微信小程序平台的版本号
  32. try {
  33. const info = uni.getAccountInfoSync();
  34. base =
  35. 'mp_' +
  36. (info.miniProgram.version || info.miniProgram.envVersion || 'dev');
  37. } catch (e) {
  38. base = 'mp_unknown';
  39. }
  40. // #endif
  41. // #ifdef H5
  42. // H5 暂不强制拦截
  43. return 'h5_static';
  44. // #endif
  45. // 拼上兜底标志:有值时即使版本号没变也触发重新弹窗
  46. return FORCE_REFRESH_FLAG ? base + '__' + FORCE_REFRESH_FLAG : base;
  47. }
  48. // 判断是否需要重新弹窗
  49. // 用户同意的版本号 !== 当前运行端版本号 → 需要弹窗
  50. export function needPrivacyPopup() {
  51. // #ifdef H5
  52. // H5 不强制拦截
  53. return false;
  54. // #endif
  55. const current = getCurrentVersion();
  56. const saved = uni.getStorageSync(PRIVACY_STORAGE_KEY);
  57. // 没有记录(含老数据 privacy_agreed: true)或版本号不匹配 → 需要弹窗
  58. if (!saved) return true;
  59. return saved !== current;
  60. }
  61. // 标记已同意当前版本的隐私协议
  62. export function markPrivacyAgreed() {
  63. const current = getCurrentVersion();
  64. uni.setStorageSync(PRIVACY_STORAGE_KEY, current);
  65. }