# 隐私合规整改说明 ## 问题描述 应用在荣耀应用市场上架时被驳回,原因是: - **高德地图SDK在用户同意隐私政策之前就收集了OAID等信息** - 违反了隐私合规要求:必须在用户点击同意隐私政策弹窗之后,SDK才能收集相关权限 ## 整改方案 ### 1. 从Application中移除SDK的提前初始化 **修改文件:** `app/src/main/java/com/xunpaisoft/social/MyApp.java` **修改内容:** - 移除了高德定位SDK在`onCreate()`中的初始化(原第122-133行) - 移除了友盟统计SDK的正式初始化(原第113-117行),只保留预初始化`UMConfigure.preInit()` **原因:** - Application的`onCreate()`在应用启动时就会执行,此时用户还没有看到隐私政策弹窗 - 如果此时初始化SDK,SDK可能会立即收集设备信息(如OAID、IMEI等),违反隐私合规要求 ### 2. 创建统一的SDK初始化方法 **新增方法:** `MyApp.initThirdPartySDKs(Context context)` **功能:** - 统一管理所有第三方SDK的初始化 - 在用户同意隐私政策后统一调用 - 包含高德定位SDK和友盟统计SDK的初始化 **初始化顺序:** 1. 高德定位SDK - 先调用隐私合规接口:`updatePrivacyShow()` 和 `updatePrivacyAgree()` - 再初始化定位服务:`AMapLocationHelper.getInstance().init()` 2. 友盟统计SDK - 调用正式初始化:`initUmengSDKFormally()` ### 3. 在用户同意隐私政策后初始化SDK **修改文件:** `app/src/main/java/com/xunpaisoft/social/im/main/SplashActivity.java` **修改内容:** 1. **首次启动场景(用户点击"同意"按钮):** - 在`tv_dia_ok`的点击事件中,用户点击"同意"后立即调用`MyApp.initThirdPartySDKs()` - 确保在用户明确同意隐私政策后,SDK才开始收集信息 2. **非首次启动场景(用户已同意过):** - 在`showNextScreen()`方法中,如果`isNotFirst`为true,说明用户已经同意过隐私政策 - 此时也应该初始化SDK,因为用户已经同意过 ## 代码修改详情 ### MyApp.java ```java // 修改前:在onCreate()中直接初始化 com.amap.api.location.AMapLocationClient.updatePrivacyShow(this, true, true); com.amap.api.location.AMapLocationClient.updatePrivacyAgree(this, true); com.xunpaisoft.social.utils.AMapLocationHelper.getInstance().init(this); UMConfigure.init(this, "69009244644c9e2c2067d39b", "Channel", ...); // 修改后:只预初始化友盟,其他SDK延迟到用户同意后 UMConfigure.preInit(this, "69009244644c9e2c2067d39b", "Channel"); // 高德SDK和友盟正式初始化已移至用户同意隐私政策后 ``` ### SplashActivity.java ```java // 用户点击"同意"按钮后 viewRoot.findViewById(cn.wildfire.chat.kit.R.id.tv_dia_ok).setOnClickListener(view1 -> { commDialog.dismiss(); SharedPreferencesUtils.putBoolean(Constants.IS_NOT_FIRST_INTO,true); // 用户点击同意隐私政策后,初始化第三方SDK com.xunpaisoft.social.MyApp.initThirdPartySDKs(SplashActivity.this); // ... 后续逻辑 }); // 非首次启动时 } else { // 非首次启动,用户已同意过隐私政策,初始化第三方SDK com.xunpaisoft.social.MyApp.initThirdPartySDKs(SplashActivity.this); // ... 后续逻辑 } ``` ## 合规要点 1. ✅ **首次运行APP时,在用户点击同意隐私政策弹窗之后,SDK再收集相关权限** - 高德定位SDK和友盟统计SDK的初始化都在用户点击"同意"按钮后执行 2. ✅ **集成的第三方SDK建议升级到最新版本** - 高德定位SDK已调用隐私合规接口:`updatePrivacyShow()` 和 `updatePrivacyAgree()` - 友盟统计SDK使用预初始化模式,符合合规要求 3. ✅ **在"同意"按钮上加入判定函数,当用户点击"同意"后,SDK再执行调用系统接口的相关函数行为** - 在`SplashActivity`的"同意"按钮点击事件中,明确调用`initThirdPartySDKs()` - 确保只有在用户明确同意后,SDK才开始收集信息 ## 测试建议 1. **首次安装测试:** - 卸载应用,重新安装 - 验证隐私政策弹窗是否正常显示 - 点击"同意"后,检查日志确认SDK已初始化 - 使用抓包工具验证SDK是否在同意后才开始收集信息 2. **非首次启动测试:** - 关闭应用,重新打开 - 验证SDK是否正常初始化(因为用户已同意过) 3. **拒绝隐私政策测试:** - 点击"不同意"按钮 - 验证应用是否正常退出 - 验证SDK是否未初始化 ## 注意事项 1. **其他SDK检查:** - 阿里云一键登录SDK:已在Application中初始化,但该SDK在用户主动点击登录按钮时才会收集信息,符合要求 - 推送服务:已在Application中初始化,但推送服务通常不涉及敏感信息收集 2. **后续维护:** - 如果添加新的第三方SDK,必须遵循相同的原则:在用户同意隐私政策后才初始化 - 建议统一使用`MyApp.initThirdPartySDKs()`方法管理所有SDK的初始化 ## 参考文档 - 荣耀应用市场隐私合规要求 - 高德定位SDK隐私合规接口文档 - 友盟统计SDK合规初始化文档