如何通过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)
- 在
pubspec.yaml中添加依赖:
dependencies: device_info_plus: ^9.0.2 # 建议使用最新版本
- 封装获取唯一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
相关产品推荐
相关产品推荐

