项目中遇到了一个需求,需要获取Android设备的唯一标识。
查阅了百度、Google前几页的主流做法,发现并没有100%完美的方案,所以只能吸收各家的优势,汇总用到自己的项目中。
主流做法是,获取系统的某些信息,作为设备的唯一标识。
以下是不同的方案和存在的不足:
1.Build.SERIAL: 硬件序列号,可能重复,亲身经历过...
2.ANDROID_ID: 随机生成,出厂或者root后可能会变,可能会生成相同的9774d56d682e549c、可能为null。
3.硬件信息:两个相同型号的手机可能一样。升级后也可能会变。
4.IMEI:平板没有。6.0以上需要权限,为了一个标识去让用户同意一个权限...
5.InstallationID: 重新安装会变化
6.MAC地址:可能会变
7.随机生成一个ID,存起来:可能会被用户清理掉缓存
这些方案主要存在两个问题
1.可能重复
2.可能会变
最终采用方案
1.标识内容采用:Build.SERIAL+ANDROID_ID+硬件信息+MAC地址,进行加密生成一个32位标识
2.缓存:SharePreferences缓存 + SD Card缓存(使用隐藏文件)。
缓存目的:防止这些系统信息万一变了。而SD Card缓存是为了防止用户卸载重装APP后,缓存被清掉了。
最极端不幸的情况:
SharePreferences被用户清掉了 ,并且 SD Card的(隐藏)缓存文件被用户发现并清掉 了,并且 标识采用的四个系统信息还变了....
才可能出现标识变了,但可以说概率非常非常小了。
(代码晚点贴上)
原创文章,
觉得有用的不妨点个赞~
参考:
Android 设备唯一标识(多种实现方案)https://mp.weixin.qq.com/s/99eQ1_9wzYYByNTIrzOVfA
网友评论