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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:52:53