mirror of
https://github.com/hicccc77/WeFlow.git
synced 2026-03-30 15:08:06 +00:00
fix: 数据匿名收集受 analyticsConsent 开关控制 (#589)
- 新增 analyticsConsent state 追踪用户同意状态 - initCloudControl() 仅在用户明确同意后执行 - recordPage() 同样受 analyticsConsent 守卫 - handleAnalyticsAllow 同步更新 state,用户同意后立即生效 Fixes #589
This commit is contained in:
16
src/App.tsx
16
src/App.tsx
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user