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

如何在Flutter中获取Android设备唯一标识符?

Android 10+ 设备唯一标识符解决方案思路

核心需求拆解

需要一个稳定的设备标识符,用于区分已分配给客户的设备和可用设备,但Android 10+限制了IMEI、MAC等硬件ID的访问权限,且使用device_info_plus时出现重装应用后标识符变更的问题。

可行解决方案与思路

1. 正确使用Android ID(API 26+)

你提到的64位十六进制唯一值就是Android ID(对应系统API的Settings.Secure.ANDROID_ID),它对应用签名密钥、用户、设备三者的组合唯一,仅在恢复出厂设置或签名密钥变更时才会改变。

  • 排查device_info_plus的使用:确保获取的是androidId字段,而非其他临时生成的标识(如应用实例ID),示例代码:
    final deviceInfo = await DeviceInfoPlugin().androidInfo;
    final String stableId = deviceInfo.androidId; // 此为目标稳定标识符
    
  • 注意:多用户设备中不同用户的Android ID不同,若业务为单用户场景可忽略此差异。

2. 本地持久化+云端关联方案

若需规避重装应用导致的标识变更,可结合本地存储与服务器:

  • 首次启动:获取Android ID,生成自定义UUID,将UUID与Android ID绑定后存入本地SharedPreferences,同时上传至服务器关联。
  • 后续启动:优先读取本地UUID,若不存在(如重装),则用Android ID向服务器查询对应UUID,存在则复用,不存在则重新生成并绑定。
  • 优势:既保留了Android ID的设备关联性,又解决了重装应用的标识断裂问题。

3. 服务器端设备注册机制

若需严格绑定设备(即使恢复出厂也能识别),可采用令牌式注册:

  • 应用首次启动时,向服务器请求唯一设备令牌,将令牌存入本地安全存储(如Android KeyStore)。
  • 每次启动向服务器上报令牌,服务器通过令牌识别设备。
  • 恢复出厂后,用户登录账号时,服务器将新令牌与原账号关联,恢复设备的分配状态。

4. 避坑提醒

  • 禁止尝试绕过系统隐私限制获取IMEI/MAC,会导致应用被Google Play拒审,且高版本系统无法获取。
  • 不要使用device_info_plus中的临时标识字段(如id),此类字段为应用安装实例唯一,重装即失效。

内容的提问来源于stack exchange,提问作者Bohdan Ilkiv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:17:14