import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:uuid/uuid.dart'; /// 设备信息工具类(控制端,非系统签名应用) /// /// 与 WebRTCControlled 的 DeviceUtils 对应,但控制端没有系统签名, /// 因此无法稳定获取真实的硬件序列号,这里采用「不要求准确」的兜底方案: /// 1. 优先使用官方插件([DeviceInfoPlugin])提供的 serialNumber; /// 2. 失败则使用 iOS 的 identifierForVendor; /// 3. 再失败则生成随机 UUID。 class DeviceUtils { DeviceUtils._(); /// 获取设备标识(适用于普通应用)。 /// /// 兼容各平台:Android 使用官方序列号,iOS 使用 identifierForVendor, /// 均不可用时回退到随机 UUID。 static Future getSerialNumber() async { const uuid = Uuid(); try { final deviceInfo = DeviceInfoPlugin(); if (Platform.isAndroid) { final androidInfo = await deviceInfo.androidInfo; final serial = androidInfo.serialNumber; if (serial.isNotEmpty && serial.toLowerCase() != 'unknown') { return serial; } } else if (Platform.isIOS) { final iosInfo = await deviceInfo.iosInfo; final id = iosInfo.identifierForVendor; if (id != null && id.isNotEmpty) { return id; } } } catch (_) { // 获取失败,走兜底逻辑 } return uuid.v4(); } }