Android应用隐私合规:解决极光推送SDK提前收集WiFi信息问题
问题描述
我的应用在送审时被检测出以下问题:
- 极光推送SDK在未经用户同意的情况下,读取WIFI的SSID
- 获取了BSSID和MAC地址等敏感信息
- 触发了ACCESS_FINE_LOCATION权限
从具体违规日志来看:
违规详情:content=获取WiFi连接信息(含bssid):SSID: , BSSID: 02:00:00:00:00:00, MAC: 02:00:00:00:00:00...
callstack:android.net.wifi.WifiManager.getConnectionInfo:1677;cn.jiguang.bv.a.I:94;...
这些敏感信息涉及位置隐私,属于应用商店严格审核的部分。
SSID是什么及其用途
SSID(Service Set Identifier)就是我们常见的WiFi网络名称。极光推送SDK收集SSID主要用于:
- 设备识别:通过网络信息帮助唯一标识设备
- 推送优化:根据网络环境选择最佳推送通道
- 数据分析:分析用户使用场景和网络环境
问题原因分析
这个问题的根本原因在于:极光推送SDK会在应用启动时自动执行初始化,并收集设备信息。
我是在启动页这里去根据用户是否同意隐私条款的,调用JCollectionAuth.setAuth(context,boolean)的。看文档也没特殊说明啥内容。问了才知道,还必须在项目一启动就立马执行的Application中先调用JCollectionAuth.setAuth(context,false)禁止极光推送隐私权限。
极光SDK的官方人员解释说:“除了init外,其他极光接口(setbadge等)有可能导致sdk初始化”!即使我没主动调用任何极光相关方法,SDK可能也会自己偷偷"动起来"。
解决方案
-
关键步骤:在Application的onCreate方法中立即调用:
JCollectionAuth.setAuth(context, false)
这必须是应用启动时第一时间执行的代码之一,目的是告诉极光SDK不要初始化和收集信息
-
只有当用户同意隐私政策后,才能设置:
JCollectionAuth.setAuth(context, true)
然后再调用正常的初始化接口
-
在setAuth方法中,还可以添加额外代码来禁用SSID、BSSID和MAC地址读取:
fun setAuth(context: Context?, auth: Boolean) {JCollectionAuth.setAuth(context, auth)// 禁用SSID、BSSID和MAC地址读取disableWifiAndMacAddressCollection(context) }
-
确保隐私政策中明确说明了极光SDK收集的信息内容。参考极光官方的隐私描述文档:https://docs.jiguang.cn/jpush/client/jghgzy_a_i_h