Files
zhini_im/隐私合规整改说明.md
rw0067680 c01808ac21 first commit
Change-Id: Ib7c2ab10a2562044fcaf9879388a6cbc1db6ac61
2025-12-23 10:00:49 +08:00

5.1 KiB
Raw Permalink Blame 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

// 修改前在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);
    // ... 后续逻辑
}

合规要点

  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合规初始化文档