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类中, 而这个类被标记为过时

20190524143107.png

大概意思是: 以后会被 XXX 替代, 而且以后这个类只有系统可以访问

所以这个被封死了

获取真实 wifi 地址

使用来获取

这个类位于 DevicePolicyManager 类中, 这是一个设备管理员专用的类

20190524143610.png

所以这个也暂时别想了

IMEI/序列号

20190524143707.png

官方原文: 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 年 中国的开发者大会, 关于这部分有一个截图

20190916143434.png

只要你是同一个签名, 获取的总是相同, 只有恢复出厂设置才会视为不同设备

剪切板数据

现在,除非你是输入法, 或者具有焦点应用, 否则无法再读取剪切板数据了

不会以后在淘宝复制一个口令,然后支付宝/淘宝全家桶都出来告诉你, 可能是我的口令了, 请点一下之类的东西了

也不会有复制了一个 url, 然后 UC 浏览器说, 这个网页不错,我能打开, 点我点我

另外也不用担心某个 app 后台运行着, 然后把你的剪切板数据都监听一下, 只要改了我就上报

后记

androidQ 基本隔绝了唯一识别码的读取方式, 唯一的一个方案是你注册成为"设备管理器", 然后读取 mac 地址

以上