flutter如何获取设备序列号

在Flutter开发中,我需要获取设备的唯一序列号用于用户设备识别。尝试了device_info插件,但在Android和iOS上获取到的标识符不一致,且部分设备返回空值。请问有什么可靠的方法能跨平台获取设备序列号?需要注意哪些权限和兼容性问题?

2 回复

在Flutter中,使用device_info插件获取设备序列号。导入插件后,通过DeviceInfoPlugin获取设备信息,Android使用androidInfo.androidId,iOS使用iosInfo.identifierForVendor。注意权限和平台差异。

更多关于flutter如何获取设备序列号的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中获取设备序列号(如 Android 的 Build.SERIAL 或 iOS 的 identifierForVendor)需要使用第三方插件,因为 Flutter 本身不提供直接访问设备硬件信息的方法。以下是详细步骤:

1. 使用 device_info_plus 插件

这是最常用的插件,支持 Android 和 iOS 设备信息获取。

步骤:

  1. 添加依赖:在 pubspec.yaml 文件中添加:

    dependencies:
      device_info_plus: ^9.0.0  # 检查最新版本
    

    运行 flutter pub get 安装。

  2. 代码实现

    import 'package:device_info_plus/device_info_plus.dart';
    
    Future<String?> getDeviceSerial() async {
      final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
      try {
        if (Platform.isAndroid) {
          AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
          return androidInfo.serial; // 可能返回 "unknown"(需权限)
        } else if (Platform.isIOS) {
          IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
          return iosInfo.identifierForVendor; // 类似序列号的唯一标识
        }
      } catch (e) {
        print("获取设备序列号失败: $e");
      }
      return null;
    }
    
  3. Android 权限配置(仅 Android):

    • android/app/src/main/AndroidManifest.xml 中添加:
      <uses-permission android:name="android.permission.READ_PHONE_STATE" />
      
    • 注意:从 Android 10 开始,普通应用无法获取设备序列号,serial 可能返回 "unknown"。考虑使用其他唯一标识(如 androidId)。

2. 注意事项

  • Android 限制:高版本系统需用户授权,且序列号可能不可用。建议使用 androidInfo.androidId 作为替代(无需权限,但恢复出厂设置会重置)。
  • iOS 限制identifierForVendor 在应用卸载重装后可能变化,且不同厂商应用获取的值不同。

替代方案

若需更稳定的唯一标识:

  • 使用 device_info_plusandroidId(Android)或 identifierForVendor(iOS)。
  • 结合其他信息(如设备型号 + 系统版本)生成自定义标识。

总结

通过 device_info_plus 插件可获取设备序列号或类似标识,但需注意平台差异和权限限制。建议测试目标平台的实际返回值,并根据需求调整逻辑。

回到顶部