Android设备标识选型:Android ID与UUID的差异及相关问题咨询
Android 设备标识方案选型与存储建议
问题1:哪种标识能降低多设备重复风险?
- UUID能最大程度降低多设备出现相同标识的风险。
- Android ID存在明确的重复概率:比如部分定制ROM、出厂时未正确初始化的设备,或者早期Android版本(Android 2.3之前)的设备,都可能出现相同的Android ID;甚至有厂商为简化流程,给批量设备写入相同的Android ID。
UUID.randomUUID()生成的是UUIDv4格式的随机标识,其碰撞概率低到可以忽略不计(理论上需要生成约10^18个UUID才可能出现一次碰撞),完全能满足“不同设备绝不重复”的要求。
问题2:最持久的存储方式,减少标识重新生成
要减少标识重新生成的概率,优先选择应用私有存储类方案,按实用性排序:
- SharedPreferences:这是最常用的轻量存储方案,标识会以键值对形式存在应用的私有目录下,只要用户不手动清除应用数据、不卸载应用,标识就会一直保留,应用重启、更新都不会丢失。示例代码:
// 存储UUID SharedPreferences sp = getSharedPreferences("DevicePrefs", MODE_PRIVATE); sp.edit().putString("unique_device_id", uniqueID).apply(); // 读取UUID String savedId = sp.getString("unique_device_id", null); - 内部私有文件存储:将标识写入应用内部存储的私有文件中,同样只有应用自身可访问,安全性和持久性和SharedPreferences一致,适合存储更复杂的数据,不过对于单个字符串来说略显冗余。示例代码:
// 写入文件 File file = new File(getFilesDir(), "device_id.txt"); FileWriter writer = new FileWriter(file); writer.write(uniqueID); writer.close(); // 读取文件 BufferedReader reader = new BufferedReader(new FileReader(file)); String savedId = reader.readLine(); reader.close();
注:如果用户卸载应用或清除应用数据,以上两种存储的标识都会丢失,符合你“可接受应用重装后标识变更”的要求。
内容的提问来源于stack exchange,提问作者mcarugati
相关产品推荐
相关产品推荐

