之前的 Android 是定值,即不同应用获取到的是一个值,除非以下情况:
AndroidID会可能发生改变一般来说有以下情况:
1.恢复出厂设置
2.root/恢复root
3.三清
4.刷机
5.系统更新
6.软件修改(一般是模拟器,xposed,root)
AndroidID在Android 8.0之后的更改,详情拉到最后看文章最后,看“隐私性”相关描述。
由此可见,使用Android做唯一标识符风险很大,因为他不是真的唯一。
暂用的解决方案可以是,获取到AndroidID后,记录在本地sd卡,记住不能是私有目录,否则卸载app就会被删除了。然后每次都读取文件匹配当前AndroidID,如果不一致则更新服务器记录,进行数据迁移。这个方法可以避免很多情况下AndroidID的改变,除非用户手动删除我们的配置文件或者格式化sd卡。
其实无论是苹果还是安卓,都在限定开发者不能获取一个唯一、永久不变的设备标识。虽然IMEI在安卓目前仍可用,但是需要申请权限,存在用户敏感性,而且指不定下个版本就不能获取了。
至于想找到一个东西做用户唯一标识,目前还没有很好解决方法---等待大家去挖掘了,或者有想法的可以在评论区讨论一下。
翻墙文档调查结果:
对安卓标志符的使用建议:
https://developer.android.google.cn/training/articles/user-data-ids.html#tenets_of_working_with_android_identifiers
隐私变化的一个说明:
https://developer.android.com/about/versions/oreo/android-8.0-changes.html
-------------------------------------------------(方便不会科学上网用户)---------------------------------------------------------------
唯一标识符最佳做法
本文提供了根据用例为应用选择合适标识符的指导。
要大致了解 Android 权限,请参阅权限概览。有关使用 Android 权限的具体最佳做法,请参阅应用权限最佳做法。
使用 Android 标识符的最佳做法
在使用 Android 标识符时,请遵循以下最佳做法:
#1:避免使用硬件标识符。 在大多数用例中,您可以避免使用硬件标识符,例如 SSAID (Android ID) 和 IMEI,而不会限制所需的功能。
#2:只针对用户分析或广告用例使用广告 ID。 在使用广告 ID 时,请始终遵循用户关于广告跟踪的选择。此外,请确保标识符无法关联到个人身份信息 (PII),并避免桥接广告 ID 重置。
#3:尽一切可能针对防欺诈支付和电话以外的所有其他用例使用实例 ID 或私密存储的 GUID。 对于绝大多数非广告用例,使用实例 ID 或 GUID 应该足矣。
#4:使用适合您的用例的 API 以尽量降低隐私权风险。 使用 DRM API 保护重要内容,并使用 SafetyNet API 防止滥用行为。SafetyNet API 是能够确定设备真伪而不会招致隐私权风险的最简单方法。
本指南剩下的部分将以开发 Android 应用为背景详细介绍这些规则。
Android 8.0 及更高版本中的标识符
MAC 地址具有全局唯一性,无法由用户重置,在恢复出厂设置后也不会变化。因此,一般不建议使用 MAC 地址进行任何形式的用户标识。在 Android 6.0(API 级别 23)及更高版本中,本地设备 MAC 地址(例如 WLAN 和蓝牙)无法通过第三方 API 获取。WifiInfo.getMacAddress()
方法和 BluetoothAdapter.getDefaultAdapter().getAddress()