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

Flutter中如何正确获取Android设备的Device ID?

解决DeviceInfoPlugin获取正确Device ID的问题

你当前代码里用androidInfo.id获取设备ID,但这个字段在不同Android版本返回的内容并不稳定:Android 8.0及以上系统中,它返回的是系统随机生成的临时ID,并非你预期的IMEI类标识。以下是针对不同平台的正确获取方式:

Android平台处理

1. 权限配置

如果要获取IMEI(仅Android 9及以下可用),需在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Android 6.0+还需要在代码中动态请求该权限。

2. 区分系统版本获取对应标识

  • Android 10及以上:系统限制第三方应用获取IMEI,可使用androidId(设备首次启动生成的稳定标识,恢复出厂设置会重置)
  • Android 9及以下:可获取imei作为设备唯一标识

修改后的Android适配代码:

import 'package:permission_handler/permission_handler.dart'; // 需引入permission_handler包

Future<void> _getDeviceId() async {
  if (kIsWeb) return;

  try {
    DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
    AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;

    String? targetDeviceId;
    if (androidInfo.version.sdkInt >= 29) {
      // Android 10+ 只能获取androidId
      targetDeviceId = androidInfo.androidId;
    } else {
      // Android 9及以下,先申请权限再获取IMEI
      var permissionStatus = await Permission.phone.request();
      if (permissionStatus.isGranted) {
        targetDeviceId = androidInfo.imei;
      } else {
        targetDeviceId = '权限被拒绝,使用androidId替代: ${androidInfo.androidId}';
      }
    }

    setState(() {
      deviceId = targetDeviceId ?? '获取设备ID失败';
    });
    debugPrint("Device ID: $deviceId");
  } catch (e) {
    setState(() {
      deviceId = '获取设备ID失败';
    });
    debugPrint("获取设备ID失败: $e");
  }
}

iOS平台处理

iOS系统不允许第三方应用获取硬件级标识(如IMEI),常用的稳定标识是identifierForVendor(同一开发者的应用在同一设备上共享,卸载所有该开发者应用后会重置),补充iOS处理逻辑:

// 在原代码的try块中添加iOS分支
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
String targetDeviceId = iosInfo.identifierForVendor ?? iosInfo.uuid;

通用注意事项

  • 高版本系统对硬件标识的权限限制越来越严格,建议优先使用androidId(Android)或identifierForVendor(iOS)作为业务标识
  • 若需要跨平台统一的标识,可以将获取到的平台标识存入本地存储,后续直接读取使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:18:20