如何在Flutter中获取Android和iOS设备ID?求有效实现方案
跨平台(Android/iOS)设备ID获取实现方案
核心思路
由于系统权限限制,不存在绝对永久不变的设备ID,推荐结合系统原生ID + 本地自定义存储的方案,兼顾稳定性和适配性,满足免登录获取用户数据的需求。
1. 使用device_info_plus获取系统原生ID
先在pubspec.yaml中添加依赖:
dependencies: device_info_plus: ^9.0.2 shared_preferences: ^2.2.2
Android 端
获取Android ID:设备首次启动生成,恢复出厂设置前保持稳定,无需额外权限。
import 'package:device_info_plus/device_info_plus.dart'; Future<String?> getAndroidDeviceId() async { final AndroidDeviceInfo info = await DeviceInfoPlugin().androidInfo; return info.androidId; // 格式示例:9774d56d682e549c }
iOS 端
获取IDFV(Identifier For Vendor):同一开发者账号下的所有APP共享,用户删除该开发者所有APP后才会重置,无需权限;若需广告相关场景可使用IDFA(需申请权限)。
import 'package:device_info_plus/device_info_plus.dart'; Future<String?> getIOSDeviceId() async { final IosDeviceInfo info = await DeviceInfoPlugin().iosInfo; return info.identifierForVendor; // 格式示例:12345678-1234-1234-1234-123456789012 }
2. 自定义持久化ID方案(更稳定)
如果担心系统原生ID因重置/卸载丢失,可生成自定义UUID并存储到本地,首次启动生成后永久复用:
import 'package:shared_preferences/shared_preferences.dart'; import 'package:uuid/uuid.dart'; Future<String> getPersistentDeviceId() async { final prefs = await SharedPreferences.getInstance(); String? storedId = prefs.getString('persistent_device_id'); if (storedId == null) { storedId = const Uuid().v4(); // 生成唯一UUID await prefs.setString('persistent_device_id', storedId); } return storedId; }
3. 跨平台统一调用方法
import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:uuid/uuid.dart'; Future<String> getCrossPlatformDeviceId() async { // 优先使用自定义持久化ID,系统ID可作为关联备份字段 final persistentId = await getPersistentDeviceId(); // 可选:获取系统ID并存入后端做关联 String? systemId; final deviceInfo = DeviceInfoPlugin(); if (Platform.isAndroid) { systemId = await getAndroidDeviceId(); } else if (Platform.isIOS) { systemId = await getIOSDeviceId(); } return persistentId; }
注意事项
- Android ID:设备恢复出厂设置后会重置;部分定制ROM可能存在不一致情况。
- IDFV:用户删除开发者所有APP后会重置,同一开发者下多APP共享。
- 自定义UUID:用户清除APP数据或卸载重装会丢失,建议同时关联系统ID,或在必要时引导用户绑定账号备份。
内容的提问来源于stack exchange,提问作者hardik sindhav
相关产品推荐
相关产品推荐

