Flutter如何获取设备唯一标识符

在Flutter开发中,如何获取设备的唯一标识符?官方推荐的device_info_plus插件似乎在不同平台上返回的标识不一致(Android获取IMEI需要权限,iOS的IDFV会变化)。有没有更稳定的跨平台方案?或者如何正确处理权限问题确保获取到的标识符符合Google Play和App Store的隐私政策要求?

2 回复

在Flutter中,可使用device_info_plus插件获取设备唯一标识符。
Android通过androidId,iOS通过identifierForVendor实现。
注意:不同平台标识符可能不同,且iOS需配置权限。

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


在Flutter中获取设备唯一标识符,推荐使用 device_info_plus 插件,它支持Android和iOS平台。以下是具体实现步骤:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  device_info_plus: ^9.0.0

运行 flutter pub get 安装。

2. 代码实现

import 'package:device_info_plus/device_info_plus.dart';

// 获取设备唯一标识符
Future<String?> getDeviceId() async {
  final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
  
  try {
    if (Platform.isAndroid) {
      AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
      return androidInfo.id; // 对应 Android 的 ANDROID_ID
    } else if (Platform.isIOS) {
      IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
      return iosInfo.identifierForVendor; // 对应 iOS 的 identifierForVendor
    }
  } catch (e) {
    print('获取设备ID失败: $e');
  }
  return null;
}

注意事项:

  1. AndroidandroidInfo.id 返回的是 ANDROID_ID,在系统重置或不同应用间可能不一致。
  2. iOSidentifierForVendor 在同一开发商应用间保持一致,卸载所有应用后重置。
  3. 权限:Android 需要 <uses-permission android:name="android.permission.READ_PHONE_STATE" />(仅部分系统需要)。
  4. 唯一性限制:受系统限制,无法保证100%全局唯一,建议结合其他信息生成复合标识。

使用示例:

String? deviceId = await getDeviceId();
print('设备ID: $deviceId');

对于更稳定的方案,可考虑结合设备信息(如型号、序列号)生成自定义哈希,但需注意用户隐私和平台政策限制。

回到顶部