Flutter设备唯一标识获取插件flutter_udid的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter设备唯一标识获取插件flutter_udid的使用

flutter_udid

pub package

flutter_udid 是一个用于在iOS、Android、Mac、Windows和Linux平台上跨应用重新安装获取持久化UDID的插件。

开始使用

要使用 flutter_udid 插件,首先需要将其添加到项目的 pubspec.yaml 文件中:

dependencies:
  flutter_udid: ^最新版本号

然后,在Dart代码中导入包:

import 'package:flutter_udid/flutter_udid.dart';

接下来,可以通过以下方式获取设备的UDID:

String udid = await FlutterUdid.udid;

这将根据对应平台的格式提供一个UDID。不同平台的UDID格式和来源如下表所示:

Platform Format Source
iOS 7946DA4E-8429-423C-B405-B3FC77914E3E identifierForVendor (saved to Keychain for persistence)
Android 8af8770a27cfd182 Settings.Secure.ANDROID_ID
Mac 707E990C-D002-520B-ABA6-4216C6D514BF kIOPlatformUUIDKey
Windows 99A4D301-53F5-11CB-8CA0-9CA39A9E1F01 BIOS UUID
Linux 1124435e065241dcae2241e9caab9a6c Machine ID

如果希望所有平台都有一致的格式,可以使用:

String udid = await FlutterUdid.consistentUdid;

这将返回一个具有以下格式的UDID: 984725b6c4f55963cc52fca0f943f9a8060b1c71900d542c79669b6dc718a64b

注意:UDID可能会在工厂重置后发生变化!此外,如果设备从Android 8.0通过OTA更新并且应用程序被重新安装,由于Android 8.0的安全性更改,UDID也可能会变化。在root或越狱的设备上,ID可以被更改,因此请考虑这一点。然而,由于ID的复杂性,应该不可能通过随机猜测来识别为不同的设备。另外,如果应用程序的签名发生了变化,对于iOS和Android,UDID也可能发生变化。确保始终使用相同的数字签名来签署您的应用程序。

示例代码

下面是一个完整的示例,演示了如何在Flutter应用中使用 flutter_udid 插件来获取并显示设备的UDID:

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:flutter_udid/flutter_udid.dart';

void main() => runApp(const MyApp());

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _udid = 'Unknown';

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    String udid;
    try {
      udid = await FlutterUdid.udid;
    } on PlatformException {
      udid = 'Failed to get UDID.';
    }

    if (!mounted) return;

    setState(() {
      _udid = udid;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Running on: $_udid\n'),
        ),
      ),
    );
  }
}

该示例创建了一个简单的Flutter应用程序,当应用程序启动时,它会尝试获取设备的UDID,并在屏幕上显示出来。如果获取UDID失败,则会显示“Failed to get UDID.”。


更多关于Flutter设备唯一标识获取插件flutter_udid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter设备唯一标识获取插件flutter_udid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_udid插件来获取设备唯一标识的示例代码。

步骤 1: 添加依赖

首先,你需要在pubspec.yaml文件中添加flutter_udid插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  flutter_udid: ^x.y.z  # 请使用最新版本号

然后运行flutter pub get来安装依赖。

步骤 2: 配置权限(Android)

对于Android设备,你需要在AndroidManifest.xml文件中添加获取设备ID所需的权限。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!-- 如果需要,可以添加其他必要的权限 -->

    <!-- 其他配置 -->

</manifest>

注意:在Android 10(API级别29)及以上版本中,获取设备ID(如IMEI)的权限受到了限制,可能无法获取到这些信息。在这种情况下,使用flutter_udid可能会返回一个基于设备设置和其他因素的唯一标识符。

步骤 3: 使用插件

接下来,在你的Flutter代码中导入并使用flutter_udid插件。

import 'package:flutter/material.dart';
import 'package:flutter_udid/flutter_udid.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter UDID Example'),
        ),
        body: Center(
          child: UDIDWidget(),
        ),
      ),
    );
  }
}

class UDIDWidget extends StatefulWidget {
  @override
  _UDIDWidgetState createState() => _UDIDWidgetState();
}

class _UDIDWidgetState extends State<UDIDWidget> {
  String? udid;

  @override
  void initState() {
    super.initState();
    _getUDID();
  }

  Future<void> _getUDID() async {
    try {
      String? deviceUDID = await FlutterUdid.udid;
      setState(() {
        udid = deviceUDID;
      });
    } catch (e) {
      print("Error getting UDID: $e");
      setState(() {
        udid = "Error: ${e.message}";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Text(
      udid ?? "Loading UDID...",
      style: TextStyle(fontSize: 20),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml文件中添加flutter_udid插件。
  2. 权限配置:在AndroidManifest.xml文件中添加读取设备ID所需的权限(注意Android 10及以上版本的限制)。
  3. 使用插件
    • 创建一个简单的Flutter应用。
    • 使用FlutterUdid.udid异步获取设备的唯一标识符。
    • 在UI中显示获取到的UDID。

注意事项

  • 由于Android系统的权限和隐私保护机制,某些设备或Android版本可能无法获取到完整的设备ID。
  • 对于iOS设备,通常不需要额外的权限配置,但请确保在Info.plist中声明必要的权限(如果需要)。
  • 始终遵循平台的隐私政策和用户协议,不要滥用设备唯一标识符。

希望这个示例能帮助你在Flutter项目中成功使用flutter_udid插件。

回到顶部