Flutter如何获取设备ID

在Flutter开发中,我需要获取设备的唯一标识符(如IMEI或序列号),但在Android和iOS平台上发现相关API权限限制较多。请问目前有哪些可靠的跨平台方案或第三方插件可以实现?需要特别注意哪些隐私政策和权限问题?

2 回复

Flutter中获取设备ID可使用device_info_plus插件。
Android端通过androidInfo.androidId获取,iOS端通过iosInfo.identifierForVendor获取。
注意权限和平台差异,iOS需配置隐私描述。

更多关于Flutter如何获取设备ID的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中获取设备ID可以使用device_info_plus插件,这是官方推荐的设备信息获取方案。

安装依赖

pubspec.yaml 中添加:

dependencies:
  device_info_plus: ^9.0.0

然后运行:

flutter pub get

代码实现

import 'package:device_info_plus/device_info_plus.dart';

// 获取设备ID
Future<String?> getDeviceId() async {
  final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
  
  try {
    if (Platform.isAndroid) {
      final androidInfo = await deviceInfo.androidInfo;
      return androidInfo.id; // Android ID
    } else if (Platform.isIOS) {
      final iosInfo = await deviceInfo.iosInfo;
      return iosInfo.identifierForVendor; // IDFV
    }
  } catch (e) {
    print('获取设备ID失败: $e');
    return null;
  }
  return null;
}

// 使用示例
void getDeviceInfo() async {
  String? deviceId = await getDeviceId();
  if (deviceId != null) {
    print('设备ID: $deviceId');
  } else {
    print('无法获取设备ID');
  }
}

平台差异

  • Android: 返回 androidId(Android ID)
  • iOS: 返回 identifierForVendor(IDFV)

注意事项

  1. 权限要求

    • Android:需要 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    • iOS:无需额外权限
  2. 设备ID特性

    • Android ID 在恢复出厂设置后会改变
    • IDFV 在卸载所有该开发者的应用后会改变
  3. 隐私合规:使用设备ID时需遵守相关隐私政策,向用户说明用途。

这个方案简单可靠,适合大多数Flutter应用的设备识别需求。

回到顶部