Android Q 隐私篇(4) - 唯一标识符, 剪切板数据
文章目录
第四篇,
唯一识别码的前世
在开发中, 总有人会提出各种设备"唯一标识符"的概念,以便于定位用户的唯一性, 或对于用户行为进行分析
很遗憾, 通过多年的探索, 目前没有任何一种特别准确, 一定能保证唯一的方案
包括但不仅限于以下方案
设备序列号 IMEI imsi mac 地址(wifi 模块)
如以下代码:
1package top.kikit.uniqueidprivacy
2
3import android.Manifest
4import android.annotation.SuppressLint
5import android.content.Context
6import android.os.Bundle
7import android.telephony.TelephonyManager
8import android.util.Log
9import androidx.appcompat.app.AppCompatActivity
10import com.tbruyelle.rxpermissions2.RxPermissions
11
12class MainActivity : AppCompatActivity() {
13 private val TAG = "MainActivity";
14
15 private val rxPermissions = RxPermissions(this)
16
17 @SuppressLint("CheckResult")
18 override fun onCreate(savedInstanceState: Bundle?) {
19 super.onCreate(savedInstanceState)
20 setContentView(R.layout.activity_main)
21
22
23 val mTelephonyMgr = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
24
25 rxPermissions.request(Manifest.permission.READ_PHONE_STATE)
26 .subscribe {
27 if (it) {
28 val subscriberId = mTelephonyMgr.subscriberId // imsi
29 val imei = mTelephonyMgr.imei // imei
30
31 Log.i(TAG, "subscriberId : $subscriberId")
32 Log.i(TAG, "imei : $imei")
33 }
34 }
35 }
36}
唯一识别码的今生(androidQ 的更新)
唯一识别符
mac 地址
随机 mac 地址
现在默认传输随机 mac 地址
使用
getRandomizedMacAddress()
方法获取, 而这个方法位于WifiConfiguration
类中, 而这个类被标记为过时
大概意思是: 以后会被 XXX 替代, 而且以后这个类只有系统可以访问
所以这个被封死了
获取真实 wifi 地址
使用
getWifiMacAddress()
来获取
这个类位于 DevicePolicyManager 类中, 这是一个设备管理员专用的类
所以这个也暂时别想了
IMEI/序列号
官方原文: androidQ 以后只有拥有
READ_PRIVILEGED_PHONE_STATE
权限的应用才能访问唯一识别码
如果 targetVersion 在 Q 以下, 可以使用, 但是会返回 null, targetVersion 为 Q 以上的, 直接抛出SecurityException
异常
广告识别码
官方给提供的广告识别码在一定程度上可以用于广告, 但是广告识别码是可以由用户自己重置的
以下是介绍: create an Android Advertising ID
best practices for unique identifiers
这这两段都是中文, 某些朋友如果无法科学上网, 默哀下
不过这个广告 ID 似乎需要 google service 支持, 只能说再见
官方建议
官方还有一个建议,就是自己创建, 这个也是我一直以来在使用的方案, 就是自己创建一个 UUID
UUID.randomUUID().toString()
然后创建一个文件,把这东西写入, 以前是保存在 sdcard 中, 现在的话, 不能简单的保存在 sdcard 中了,可能需要保存到 Media 中,否则卸载后文件就木有了
当然这个防止不了三清手机
更新 2019 年 9 月 16 日
查看 2019 年 中国的开发者大会, 关于这部分有一个截图
只要你是同一个签名, 获取的总是相同, 只有恢复出厂设置才会视为不同设备
剪切板数据
现在,除非你是输入法, 或者具有焦点应用, 否则无法再读取剪切板数据了
不会以后在淘宝复制一个口令,然后支付宝/淘宝全家桶都出来告诉你, 可能是我的口令了, 请点一下之类的东西了
也不会有复制了一个 url, 然后 UC 浏览器说, 这个网页不错,我能打开, 点我点我
另外也不用担心某个 app 后台运行着, 然后把你的剪切板数据都监听一下, 只要改了我就上报
后记
androidQ 基本隔绝了唯一识别码的读取方式, 唯一的一个方案是你注册成为"设备管理器", 然后读取 mac 地址
以上