ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

《HarmonyOS 7 应用上架与隐私合规工程化》02:隐私同意之前,SDK 到底能不能先初始化【鸿蒙心迹】

《HarmonyOS 7 应用上架与隐私合规工程化》02:隐私同意之前,SDK 到底能不能先初始化【鸿蒙心迹】 隐私弹窗还没弹出来统计 SDK 已经把设备信息发出去了。第一次做合规的时候以为隐私弹窗就是个 UI用户点了同意存个状态就完了。后来才发现不对用户还没点同意App 启动的时候统计 SDK、认证 SDK、云服务 SDK 都已经在 onCreate 里初始化了。设备信息、网络状态、唯一标识早就发出去了。隐私弹窗只是个摆设真正的数据早就传完了。一、先想清楚App 启动后前 1000ms 发生了什么把 App 启动后的前 1000ms 拆开看看时间发生了什么0-100msAbilityStage 初始化100-300msUIAbility onCreate300-500ms各个 SDK 初始化500-800ms隐私弹窗显示800-1000ms用户点同意/拒绝问题是SDK 在 300-500ms 就初始化了隐私弹窗 500ms 才显示。用户还没同意SDK 已经开始收集数据了。二、隐私同意状态为什么要真的控制初始化很多人以为隐私弹窗就是 UI用户点了同意存个 Preferences 就行。不对。隐私同意要真的控制 SDK 初始化。同意之前SDK 不能初始化同意之后再初始化。阶段做什么未同意最小启动只跑必要的代码刚同意延迟初始化所有 SDK已同意正常运行这段代码解决什么问题SDK 延迟初始化。文件entryability/EntryAbility.ets用途隐私同意控制接入位置Ability 启动import{PreferencesUtil}from./utils/PreferencesUtil;classEntryAbility{onCreate(){// 先检查隐私同意状态letconsentedPreferencesUtil.getConsentState();if(!consented){// 未同意只初始化最小启动this.initMinimal();this.showPrivacyDialog();}else{// 已同意正常初始化所有 SDKthis.initAllSDKs();}}onUserConsented(){// 用户同意后延迟初始化所有 SDKthis.initAllSDKs();PreferencesUtil.setConsentState(true);}}三、撤回同意以后怎么办还有个问题用户撤回同意怎么办很多人只考虑同意不考虑撤回。撤回以后SDK 还在运行数据还在收集。操作做什么同意初始化所有 SDK撤回停止 SDK释放资源四、几个容易踩的坑第一个坑在 onCreate() 里初始化所有 SDK。不管用户有没有同意先初始化了再说。第二个坑隐私弹窗只是 UI没有真正控制初始化。弹窗是摆设。第三个坑同意状态只存在内存。杀进程就忘了。第四个坑用户撤回后 SDK 继续运行。资源没释放。第五个坑多个 SDK 相互依赖导致初始化顺序混乱。A 依赖 BB 要等 A死锁了。第六个坑启动优化把合规检查绕过去。为了快跳过了同意检查。这次做合规初始化最大的体会是隐私合规不是加个弹窗是真的要控制数据收集的时机。真正做的时候最容易忽略的不是怎么写弹窗而是怎么管好启动顺序。用户同意之前哪些代码能跑、哪些不能跑每一步都要想清楚。
返回列表