| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * 隐私协议版本号 - 自动跟随 App/小程序版本
- *
- * 【正常流程】
- * 每次发版时,开发者只需要改 manifest.json 中的 versionName / versionCode,
- * 或者发版工具自动改版本号,隐私协议就会自动重新弹窗,无需手动调整此处。
- *
- * 【特殊兜底】
- * 如果协议改了但不想发新版 App,把下方 FORCE_REFRESH_FLAG 改成新值即可
- * (比如改成日期 '2026-10-01'),所有用户下次启动会重新弹窗。
- * 协议没改时保持空字符串 '' 即可。
- *
- * 各端获取版本号方式:
- * App 端 → plus.runtime.versionCode (manifest.json 中 versionCode)
- * 小程序端 → uni.getAccountInfoSync().miniProgram.version
- */
- // ====== 兜底强制刷新标志 ======
- // 协议变了但 App/小程序版本号没变时,改这里触发重新弹窗
- // 保持 '' 不额外触发;改成任意新值(如 '2026-10-01')即可强制所有用户重新同意
- const FORCE_REFRESH_FLAG = '';
- // 本地存储 key
- export const PRIVACY_STORAGE_KEY = 'privacy_version';
- // 动态获取当前运行端的版本号(含兜底标志)
- function getCurrentVersion() {
- let base = '';
- // #ifdef APP-PLUS
- // App 端:用 versionCode(数字,每次发版必变)
- base = 'app_' + plus.runtime.versionCode;
- // #endif
- // #ifdef MP
- // 小程序端:用微信小程序平台的版本号
- try {
- const info = uni.getAccountInfoSync();
- base =
- 'mp_' +
- (info.miniProgram.version || info.miniProgram.envVersion || 'dev');
- } catch (e) {
- base = 'mp_unknown';
- }
- // #endif
- // #ifdef H5
- // H5 暂不强制拦截
- return 'h5_static';
- // #endif
- // 拼上兜底标志:有值时即使版本号没变也触发重新弹窗
- return FORCE_REFRESH_FLAG ? base + '__' + FORCE_REFRESH_FLAG : base;
- }
- // 判断是否需要重新弹窗
- // 用户同意的版本号 !== 当前运行端版本号 → 需要弹窗
- export function needPrivacyPopup() {
- // #ifdef H5
- // H5 不强制拦截
- return false;
- // #endif
- const current = getCurrentVersion();
- const saved = uni.getStorageSync(PRIVACY_STORAGE_KEY);
- // 没有记录(含老数据 privacy_agreed: true)或版本号不匹配 → 需要弹窗
- if (!saved) return true;
- return saved !== current;
- }
- // 标记已同意当前版本的隐私协议
- export function markPrivacyAgreed() {
- const current = getCurrentVersion();
- uni.setStorageSync(PRIVACY_STORAGE_KEY, current);
- }
|