feat: 被控端增加无障碍检查,flutter固定获取Android_Id
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:android_id/android_id.dart';
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
@@ -8,15 +9,16 @@ import 'package:uuid/uuid.dart';
|
||||
/// 与 WebRTCControlled 的 DeviceUtils 对应,但控制端没有系统签名,
|
||||
/// 因此无法稳定获取真实的硬件序列号,这里采用「不要求准确」的兜底方案:
|
||||
/// 1. 优先使用官方插件([DeviceInfoPlugin])提供的 serialNumber;
|
||||
/// 2. 失败则使用 iOS 的 identifierForVendor;
|
||||
/// 3. 再失败则生成随机 UUID。
|
||||
/// 2. 如果 serialNumber 为 unknown,则尝试获取 Android ID;
|
||||
/// 3. 失败则使用 iOS 的 identifierForVendor;
|
||||
/// 4. 再失败则生成随机 UUID。
|
||||
class DeviceUtils {
|
||||
DeviceUtils._();
|
||||
|
||||
/// 获取设备标识(适用于普通应用)。
|
||||
///
|
||||
/// 兼容各平台:Android 使用官方序列号,iOS 使用 identifierForVendor,
|
||||
/// 均不可用时回退到随机 UUID。
|
||||
/// 兼容各平台:Android 优先使用官方序列号,其次使用 Android ID,
|
||||
/// iOS 使用 identifierForVendor,均不可用时回退到随机 UUID。
|
||||
static Future<String> getSerialNumber() async {
|
||||
const uuid = Uuid();
|
||||
try {
|
||||
@@ -27,6 +29,13 @@ class DeviceUtils {
|
||||
if (serial.isNotEmpty && serial.toLowerCase() != 'unknown') {
|
||||
return serial;
|
||||
}
|
||||
|
||||
// 如果 serialNumber 获取失败,尝试获取 Android ID
|
||||
const androidIdPlugin = AndroidId();
|
||||
final androidId = await androidIdPlugin.getId();
|
||||
if (androidId != null && androidId.isNotEmpty) {
|
||||
return androidId;
|
||||
}
|
||||
} else if (Platform.isIOS) {
|
||||
final iosInfo = await deviceInfo.iosInfo;
|
||||
final id = iosInfo.identifierForVendor;
|
||||
|
||||
Reference in New Issue
Block a user