Flutter设备唯一标识插件unique_device_id的使用

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

Flutter设备唯一标识插件unique_device_id的使用

unique_device_id是一个用于获取设备唯一标识符的Flutter插件。它支持Android和iOS平台,分别使用SSAID(Android)和identifierForVendor(iOS)作为设备的唯一标识。

注意事项

对于Android:

  1. 需要minSdk 23,并且需要WRITE_EXTERNAL_STORAGE权限。
  2. 如果无法获取SSAID,则会生成一个随机的UUID并存储在一个加密文件中供后续使用。

开始使用

获取唯一设备ID

UniqueDeviceId.instance.getUniqueId()
  • 获取唯一设备ID(如果ID不存在,则生成并保存UUID)
    • Android: SSAID
    • iOS: identifierForVendor

设置默认使用UUID

UniqueDeviceId.instance.setDefaultUseUUID(bool)
  • 使用UUID代替SSAID(Android),identifierForVendor(iOS)

设置加密密钥

UniqueDeviceId.instance.setSecretKey(String)
  • 设置Android加密的秘密密钥(要求超过16位数字)

示例代码

以下是一个完整的示例demo,展示了如何在Flutter应用中使用unique_device_id插件来获取设备的唯一标识符。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:unique_device_id/unique_device_id.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 设置默认使用UUID
  await UniqueDeviceId.instance.setDefaultUseUUID(true);

  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String uniqueId;

  [@override](/user/override)
  void initState() {
    super.initState();

    // 在初始化时获取唯一ID
    getUniqueId().then(
      (value) => setState(
        () => uniqueId = value,
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: uniqueId?.isNotEmpty ?? false
              ? Text('Unique ID: $uniqueId\n')
              : CircularProgressIndicator(),
        ),
      ),
    );
  }

  Future<String> getUniqueId() async {
    try {
      return await UniqueDeviceId.instance.getUniqueId();
    } on PlatformException catch (e) {
      if (e.code == '1011') {
        // 请求存储权限
        final status = await Permission.storage.request();
        if (status.isGranted) {
          return getUniqueId();
        } else if (status.isPermanentlyDenied) {
          openAppSettings();
        }
      }
      return null;
    }
  }
}

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

1 回复

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


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

首先,你需要在你的pubspec.yaml文件中添加unique_device_id依赖:

dependencies:
  flutter:
    sdk: flutter
  unique_device_id: ^0.4.0  # 请注意检查最新版本号

然后,运行flutter pub get来获取依赖。

接下来,在你的Flutter项目中使用这个插件。以下是一个简单的示例,展示如何获取设备的唯一标识:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? deviceID;

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

  Future<void> _getDeviceID() async {
    try {
      String id = await UniqueDeviceId.getID;
      setState(() {
        deviceID = id;
      });
    } catch (e) {
      print("Error getting device ID: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Device ID Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Device ID:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              Text(
                deviceID ?? 'Loading...',
                style: TextStyle(fontSize: 20),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了unique_device_id依赖。
  2. 创建了一个Flutter应用,其中包含一个显示设备唯一标识的页面。
  3. initState方法中调用_getDeviceID函数来获取设备的唯一标识。
  4. 使用UniqueDeviceId.getID异步获取设备ID,并在获取成功后更新UI。

请注意,根据插件的实现和设备的不同,获取到的设备ID可能会有所不同,并且某些平台(如iOS)可能会因为隐私政策而无法获取到完全稳定的唯一标识。

此外,如果你在生产环境中使用此插件,请确保遵循相关平台的隐私政策和法规要求。

回到顶部