fix: 数据匿名收集受 analyticsConsent 开关控制 (#589)

- 新增 analyticsConsent state 追踪用户同意状态
- initCloudControl() 仅在用户明确同意后执行
- recordPage() 同样受 analyticsConsent 守卫
- handleAnalyticsAllow 同步更新 state,用户同意后立即生效

Fixes #589
This commit is contained in:
hicccc77
2026-03-30 12:05:41 +08:00
parent 40342ca824
commit 9e6f8077f7

View File

@@ -103,6 +103,7 @@ function App() {
// 数据收集同意状态 // 数据收集同意状态
const [showAnalyticsConsent, setShowAnalyticsConsent] = useState(false) const [showAnalyticsConsent, setShowAnalyticsConsent] = useState(false)
const [analyticsConsent, setAnalyticsConsent] = useState<boolean | null>(null)
const [showWaylandWarning, setShowWaylandWarning] = useState(false) const [showWaylandWarning, setShowWaylandWarning] = useState(false)
@@ -252,6 +253,7 @@ function App() {
// 协议已同意,检查数据收集同意状态 // 协议已同意,检查数据收集同意状态
const consent = await configService.getAnalyticsConsent() const consent = await configService.getAnalyticsConsent()
const denyCount = await configService.getAnalyticsDenyCount() const denyCount = await configService.getAnalyticsDenyCount()
setAnalyticsConsent(consent)
// 如果未设置同意状态且拒绝次数小于2次显示弹窗 // 如果未设置同意状态且拒绝次数小于2次显示弹窗
if (consent === null && denyCount < 2) { if (consent === null && denyCount < 2) {
setShowAnalyticsConsent(true) setShowAnalyticsConsent(true)
@@ -266,18 +268,21 @@ function App() {
checkAgreement() checkAgreement()
}, []) }, [])
// 初始化数据收集 // 初始化数据收集(仅在用户同意后)
useEffect(() => { useEffect(() => {
cloudControl.initCloudControl() if (analyticsConsent === true) {
}, []) cloudControl.initCloudControl()
}
}, [analyticsConsent])
// 记录页面访问 // 记录页面访问(仅在用户同意后)
useEffect(() => { useEffect(() => {
if (analyticsConsent !== true) return
const path = location.pathname const path = location.pathname
if (path && path !== '/') { if (path && path !== '/') {
cloudControl.recordPage(path) cloudControl.recordPage(path)
} }
}, [location.pathname]) }, [location.pathname, analyticsConsent])
const handleAgree = async () => { const handleAgree = async () => {
if (!agreementChecked) return if (!agreementChecked) return
@@ -296,6 +301,7 @@ function App() {
const handleAnalyticsAllow = async () => { const handleAnalyticsAllow = async () => {
await configService.setAnalyticsConsent(true) await configService.setAnalyticsConsent(true)
setAnalyticsConsent(true)
setShowAnalyticsConsent(false) setShowAnalyticsConsent(false)
} }