Files
VibeCoding/webrtc_controller_flutter/lib/utils/device_utils.dart
2026-07-16 14:52:10 +08:00

43 lines
1.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<String> 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();
}
}