You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Android下Android 10.0(API 29)设备唯一标识的最简方案咨询

Xamarin.Android下Android 10.0(API 29)设备唯一标识的最简方案咨询

嗨,针对你遇到的共享设备无法再依赖IMEI做唯一标识的问题,我整理了几个在Xamarin.Android下适配Android 10+的实用方案,你可以结合客户的场景来选择:

  • 自定义持久化UUID方案(最推荐)
    这个方案完全可控,不需要任何特殊权限,步骤也很简单:

    1. 应用首次启动时,生成一个唯一的UUID:var deviceId = Guid.NewGuid().ToString();
    2. 将这个UUID存储到SharedPreferences或者本地私有文件中(推荐SharedPreferences,操作更便捷)
    3. 后续每次启动应用,先读取存储的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:04:32