Xamarin.Android下Android 10.0(API 29)设备唯一标识的最简方案咨询
Xamarin.Android下Android 10.0(API 29)设备唯一标识的最简方案咨询
嗨,针对你遇到的共享设备无法再依赖IMEI做唯一标识的问题,我整理了几个在Xamarin.Android下适配Android 10+的实用方案,你可以结合客户的场景来选择:
自定义持久化UUID方案(最推荐)
这个方案完全可控,不需要任何特殊权限,步骤也很简单:- 应用首次启动时,生成一个唯一的UUID:
var deviceId = Guid.NewGuid().ToString(); - 将这个UUID存储到
SharedPreferences或者本地私有文件中(推荐SharedPreferences,操作更便捷) - 后续每次启动应用,先读取存储的UUID,若存在直接使用,不存在则重新生成并存储
补充:如果担心应用卸载重装后标识丢失,可以在生成UUID后将其上传到客户的服务器,后续启动时先从服务器校验匹配,这样即使重装也能找回对应标识。这个方案特别适合共享设备的场景,不受系统权限限制,稳定性高。
- 应用首次启动时,生成一个唯一的UUID:
Android ID方案
Android 8.0(API 26)之后,Android ID的规则是:同一签名的应用在同一设备上会得到固定的唯一值,不需要申请任何权限。在Xamarin里的获取代码是:var androidId = Android.Provider.Settings.Secure.GetString(ContentResolver, Android.Provider.Settings.Secure.AndroidId);优点是无需权限、实现简单;缺点是如果设备恢复出厂设置,或者应用签名发生变更,这个ID会改变。如果客户的设备不会频繁恢复出厂,且应用签名保持稳定,这个方案可以作为最简选项。
Advertising ID方案(不推荐)
这个ID需要依赖Google Play Services,而且用户(操作员)可以随时在系统设置里重置它,对于共享设备来说稳定性太差,很容易导致标识失效,所以不太适合你的场景。
另外要明确:Android 10+之后,普通应用已经无法获取IMEI了,READ_PHONE_STATE权限只能拿到一些非唯一的设备信息,READ_PRIVILEGED_PHONE_STATE权限只有系统应用才能申请到,所以别再考虑IMEI的方案啦。
备注:内容来源于stack exchange,提问作者mcarugati
相关产品推荐
相关产品推荐

