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

如何通过Flutter获取iOS与Android设备唯一ID以实现单设备登录

Flutter 获取iOS/Android设备唯一ID实现单设备登录

iOS 端方案:identifierForVendor 详解

  • identifierForVendor 是苹果官方提供的设备标识,同一开发者旗下的所有App在同一台设备上会返回相同值;不同开发者的App获取到的值不同。
  • 它并非设备全局唯一,但完全满足单设备登录的需求:只要用户未删除你所有的App并重装,这个标识就会和设备绑定。
  • 在Flutter中可通过device_info_plus插件直接获取,对应字段为iosInfo.identifierForVendor。

Android 端稳定标识方案

Android没有统一的厂商级唯一标识,推荐两种实用方案:

  • Android ID:通过device_info_plus插件的androidInfo.id获取。Android 8.0及以上,恢复出厂设置或重置应用权限组会导致ID变更,但日常使用中稳定性足够。
  • IMEI/MEID:仅适用于带通话功能的设备,需要申请READ_PHONE_STATE权限,但Android 10及以上禁止第三方App获取该值,不推荐用于通用场景。

Flutter 代码实现(基于device_info_plus)

  1. 在pubspec.yaml中添加依赖:
dependencies:
  device_info_plus: ^9.0.2 # 建议使用最新版本
  1. 封装获取唯一ID的工具方法:
import 'package:device_info_plus/device_info_plus.dart';
import 'dart:io';

Future<String?> getDeviceUniqueId() async {
  final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
  String? uniqueId;

  if (Platform.isIOS) {
    final IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
    uniqueId = iosInfo.identifierForVendor;
  } else if (Platform.isAndroid) {
    final AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
    uniqueId = androidInfo.id;
  }

  return uniqueId;
}

关键注意事项

  • 没有绝对永久不变的设备标识:iOS删除所有同开发者App重装、Android恢复出厂都会导致标识变更,建议在登录流程中增加手动验证(如短信验证码)来处理这类情况。
  • 设备ID仅作为辅助校验,需结合账号密码或Token一起验证,避免被伪造或篡改。

内容的提问来源于stack exchange,提问作者mustafawiped

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:12:46