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 地址
使用方法获取, 而这个方法位于WifiConfiguration
类中, 而这个类被标记为过时
大概意思是: 以后会被 XXX 替代, 而且以后这个类只有系统可以访问
所以这个被封死了
获取真实 wifi 地址
使用来获取
这个类位于 DevicePolicyManager 类中, 这是一个设备管理员专用的类
所以这个也暂时别想了
IMEI/序列号
官方原文: androidQ 以后只有拥有
READ_PRIVILEGED_PHONE_STATE
权限的应用才能访问唯一识别码
如果 targetVersion 在 Q 以下, 可以使用, 但是会返回 null, targetVersion 为 Q 以上的, 直接抛出SecurityException
异常
广告识别码
官方给提供的广告识别码在一定程度上可以用于广告, 但是广告识别码是可以由用户自己重置的
以下是介绍:
这这两段都是中文, 某些朋友如果无法科学上网, 默哀下
不过这个广告 ID 似乎需要 google service 支持, 只能说再见
官方建议
官方还有一个建议,就是自己创建, 这个也是我一直以来在使用的方案, 就是自己创建一个 UUID
UUID.randomUUID().toString()
然后创建一个文件,把这东西写入, 以前是保存在 sdcard 中, 现在的话, 不能简单的保存在 sdcard 中了,可能需要保存到 Media 中,否则卸载后文件就木有了
当然这个防止不了三清手机
更新 2019 年 9 月 16 日
查看 2019 年 中国的开发者大会, 关于这部分有一个截图
只要你是同一个签名, 获取的总是相同, 只有恢复出厂设置才会视为不同设备
剪切板数据
现在,除非你是输入法, 或者具有焦点应用, 否则无法再读取剪切板数据了
不会以后在淘宝复制一个口令,然后支付宝/淘宝全家桶都出来告诉你, 可能是我的口令了, 请点一下之类的东西了
也不会有复制了一个 url, 然后 UC 浏览器说, 这个网页不错,我能打开, 点我点我
另外也不用担心某个 app 后台运行着, 然后把你的剪切板数据都监听一下, 只要改了我就上报
后记
androidQ 基本隔绝了唯一识别码的读取方式, 唯一的一个方案是你注册成为"设备管理器", 然后读取 mac 地址
以上