Files
zhini_im/隐私合规整改说明.md

136 lines
5.1 KiB
Markdown
Raw Permalink Normal View History

# 隐私合规整改说明
## 问题描述
应用在荣耀应用市场上架时被驳回,原因是:
- **高德地图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()`在应用启动时就会执行,此时用户还没有看到隐私政策弹窗
- 如果此时初始化SDKSDK可能会立即收集设备信息如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合规初始化文档