前言
今天在酷安闲逛时下载了脉脉 App, 一打开就推荐了认识的人, 第一反应是获取了我的手机号, 但启动时也没有手机信息相关权限, 确认了下权限管理确实都关了, 拿 iPhone 测了下也能推荐
推测
看了下都是公司同事, 我推测是基于位置推荐的, 没有定位权限可能是通过 Wi-Fi 信息, 然后我关了 Wi-Fi, 改用移动网络再进入 App 发现一切一目了然了, 基于 Wi-Fi 的信息建立用户数据关联.
代码很简单
- WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
- WifiInfo info = wifiManager.getConnectionInfo ();
- String ssid = info.getSSID();//SSID 就是手机上搜索到的 Wi-Fi 名字 (本质是一串字符)
- String bssid = info.getBSSID();//BSSID 相当于无线路由器的唯一值 (本质是一个 Mac 地址)
但是 Android8.1 及以上在不开启定位权限时
获取 SSID 为: unknown ssid
获取 BSSID 为: 02:00:00:00:00:00
Wi-Fi 模块源码有更新, Google 认为之前关于位置 / 定位权限, 在用户不开启 App 定位权限的情况下, App 依然可以通过 WifiInfo 的相关信息, 比如 SSID/BSSID, 去获得用户位置信息, 这显然不合理, 是个位置权限的 bug.
来源: https://juejin.im/post/5c2daea6f265da617974f1e8