flutter如何获取设备唯一标识
在Flutter开发中,我需要获取设备的唯一标识符用于用户识别,但发现不同平台(Android/iOS)的获取方式不一致。目前尝试了device_info_plus插件,但获取的ID在某些设备上会变化。请问有什么可靠的方法能获取真正唯一的设备标识?需要注意哪些平台的限制或隐私政策问题?
2 回复
在Flutter中获取设备唯一标识,推荐使用 device_info_plus 插件。步骤如下:
- 添加依赖:
dependencies:
device_info_plus: ^9.0.0
- 代码实现:
import 'package:device_info_plus/device_info_plus.dart';
Future<String?> getDeviceId() async {
final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
return androidInfo.id; // 返回ANDROID_ID
} else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
return iosInfo.identifierForVendor; // 返回identifierForVendor
}
return null;
}
注意:
- Android返回的是
ANDROID_ID,可能为空或重置 - iOS返回的是
identifierForVendor,卸载重装会变化 - 无法获取真正的硬件唯一ID(出于隐私政策限制)
- 建议配合其他信息生成自定义设备标识
更多关于flutter如何获取设备唯一标识的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中获取设备唯一标识,推荐使用第三方插件 device_info_plus,它提供了跨平台的设备信息获取能力。
实现步骤:
-
添加依赖 在
pubspec.yaml中添加:dependencies: device_info_plus: ^9.0.0 -
获取设备信息
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_ID } else if (Platform.isIOS) { IosDeviceInfo iosInfo = await deviceInfo.iosInfo; return iosInfo.identifierForVendor; // 适用于同一供应商应用 } } catch (e) { print('获取设备ID失败: $e'); } return null; }
注意事项:
- Android:
androidInfo.id返回的是ANDROID_ID,但在Android 8.0+上,不同应用获取的值可能不同。 - iOS:
identifierForVendor在同一开发者的应用间保持一致,但卸载所有应用后重置。 - 权限:通常不需要额外权限,但建议在隐私政策中说明用途。
替代方案:
如需更稳定的标识,可考虑:
- 使用
uuid包生成应用内唯一ID并持久化存储 - 结合设备信息生成哈希值
建议根据具体需求选择合适的方案,并遵守相关平台的隐私规范。

