5.1 KiB
5.1 KiB
隐私合规整改说明
问题描述
应用在荣耀应用市场上架时被驳回,原因是:
- 高德地图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的初始化
初始化顺序:
- 高德定位SDK
- 先调用隐私合规接口:
updatePrivacyShow()和updatePrivacyAgree() - 再初始化定位服务:
AMapLocationHelper.getInstance().init()
- 先调用隐私合规接口:
- 友盟统计SDK
- 调用正式初始化:
initUmengSDKFormally()
- 调用正式初始化:
3. 在用户同意隐私政策后初始化SDK
修改文件: app/src/main/java/com/xunpaisoft/social/im/main/SplashActivity.java
修改内容:
-
首次启动场景(用户点击"同意"按钮):
- 在
tv_dia_ok的点击事件中,用户点击"同意"后立即调用MyApp.initThirdPartySDKs() - 确保在用户明确同意隐私政策后,SDK才开始收集信息
- 在
-
非首次启动场景(用户已同意过):
- 在
showNextScreen()方法中,如果isNotFirst为true,说明用户已经同意过隐私政策 - 此时也应该初始化SDK,因为用户已经同意过
- 在
代码修改详情
MyApp.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
// 用户点击"同意"按钮后
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);
// ... 后续逻辑
}
合规要点
-
✅ 首次运行APP时,在用户点击同意隐私政策弹窗之后,SDK再收集相关权限
- 高德定位SDK和友盟统计SDK的初始化都在用户点击"同意"按钮后执行
-
✅ 集成的第三方SDK建议升级到最新版本
- 高德定位SDK已调用隐私合规接口:
updatePrivacyShow()和updatePrivacyAgree() - 友盟统计SDK使用预初始化模式,符合合规要求
- 高德定位SDK已调用隐私合规接口:
-
✅ 在"同意"按钮上加入判定函数,当用户点击"同意"后,SDK再执行调用系统接口的相关函数行为
- 在
SplashActivity的"同意"按钮点击事件中,明确调用initThirdPartySDKs() - 确保只有在用户明确同意后,SDK才开始收集信息
- 在
测试建议
-
首次安装测试:
- 卸载应用,重新安装
- 验证隐私政策弹窗是否正常显示
- 点击"同意"后,检查日志确认SDK已初始化
- 使用抓包工具验证SDK是否在同意后才开始收集信息
-
非首次启动测试:
- 关闭应用,重新打开
- 验证SDK是否正常初始化(因为用户已同意过)
-
拒绝隐私政策测试:
- 点击"不同意"按钮
- 验证应用是否正常退出
- 验证SDK是否未初始化
注意事项
-
其他SDK检查:
- 阿里云一键登录SDK:已在Application中初始化,但该SDK在用户主动点击登录按钮时才会收集信息,符合要求
- 推送服务:已在Application中初始化,但推送服务通常不涉及敏感信息收集
-
后续维护:
- 如果添加新的第三方SDK,必须遵循相同的原则:在用户同意隐私政策后才初始化
- 建议统一使用
MyApp.initThirdPartySDKs()方法管理所有SDK的初始化
参考文档
- 荣耀应用市场隐私合规要求
- 高德定位SDK隐私合规接口文档
- 友盟统计SDK合规初始化文档