Flutter唯一标识符获取插件unique_identifier_3的使用

Flutter唯一标识符获取插件unique_identifier_3的使用

pub package

一个用于从Android设备获取ANDROID_ID和从iOS设备获取identifierForVendor的Flutter插件。这个唯一标识符允许你以安全且符合平台规范的方式跟踪设备。

安装

要将此包添加到你的项目中,请更新pubspec.yaml文件中的依赖项:

dependencies:
  unique_identifier_3: ^0.0.1

导入包

import 'package:unique_identifier_3/unique_identifier_3.dart';

使用

示例代码

以下示例演示了如何在Flutter应用中检索设备的唯一标识符并进行显示:

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

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

class _MyAppState extends State<MyApp> {
  String _identifier = '未知';

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

  // 方法用于初始化并检索唯一标识符
  Future<void> initUniqueIdentifier() async {
    String identifier;
    try {
      identifier = await UniqueIdentifier.serial;
    } on PlatformException {
      identifier = '无法获取唯一标识符';
    }

    if (!mounted) return;

    setState(() {
      _identifier = identifier;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('唯一标识符示例'),
        ),
        body: Center(
          child: Text('设备ID: $_identifier\n'),
        ),
      ),
    );
  }
}

iOS应用跟踪透明度

如果你的应用在iOS上使用跟踪功能,请确保请求用户授权App Tracking Transparency(ATT)。以下代码包括权限处理和自定义对话框提示:

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

Future<void> initTrackingTransparency(BuildContext context) async {
  final status = await AppTrackingTransparency.trackingAuthorizationStatus;

  if (status == TrackingStatus.notDetermined || status == TrackingStatus.denied) {
    // 在系统跟踪对话框之前显示自定义对话框
    await showCustomTrackingDialog(
      context,
      '我们使用跟踪来提升您的体验,并提供个性化内容和广告。'
      '请考虑启用跟踪以获得更好的服务。',
    );

    // 延迟以完成对话框动画
    await Future.delayed(const Duration(milliseconds: 1000));

    // 请求ATT权限
    final newStatus = await AppTrackingTransparency.requestTrackingAuthorization();
    if (newStatus == TrackingStatus.notDetermined || newStatus == TrackingStatus.denied) {
      await showSettingsDialog(
        context,
        '为了提升您的体验,请在设置中启用跟踪:设置 > 隐私与安全性 > 跟踪。',
      );
    }
  }

  // 获取广告标识符
  final uuid = await AppTrackingTransparency.getAdvertisingIdentifier();
  if (uuid == '00000000-0000-0000-0000-000000000000') {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text("无法跟踪您的设备")),
    );
  }
}

// 自定义对话框解释跟踪
Future<void> showCustomTrackingDialog(BuildContext context, String message) async {
  return showDialog<void>(
    context: context,
    builder: (context) => AlertDialog(
      title: const Text('注意'),
      content: Text(message),
      actions: [
        TextButton(
          onPressed: () => Navigator.pop(context),
          child: const Text('继续'),
        ),
      ],
    ),
  );
}

// 设置对话框引导用户启用跟踪
Future<void> showSettingsDialog(BuildContext context, String message) async {
  return showDialog<void>(
    context: context,
    builder: (context) => AlertDialog(
      title: const Text('设置需求'),
      content: Text(message),
      actions: [
        TextButton(
          onPressed: () async {
            const url = 'app-settings:';
            if (await canLaunchUrlString(url)) {
              await launchUrlString(url);
            } else {
              debugPrint('无法启动 $url');
            }
            Navigator.pop(context);
          },
          child: const Text('设置'),
        ),
        TextButton(
          onPressed: () => Navigator.pop(context),
          child: const Text('稍后'),
        ),
      ],
    ),
  );
}

错误报告与功能请求

如果您遇到任何问题或有功能请求,请在GitHub上打开一个问题。通过pull请求贡献也是欢迎的!

其他信息

平台特定行为

  • Android(8.0及以上版本)ANDROID_ID是一个唯一的64位十六进制字符串,与每个应用程序签名密钥、用户和设备的组合相关联。该值可能在工厂重置后或应用程序签名密钥更改后发生变化。
  • iOSidentifierForVendor(IDFV)对于每个供应商都是唯一的,如果设备上所有来自该供应商的应用程序都被卸载并重新安装,则可能会改变。

有关更多详细信息,请参阅官方Android 8.0行为变化文档。

许可证

该项目受MIT许可证保护。


完整示例Demo

以下是从GitHub仓库中获取的示例代码:

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  var serial = "";

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

  void getSerial() async {
    serial = await UniqueIdentifier.serial ?? '';
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行于: $serial\n'),
        ),
      ),
    );
  }
}

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

1 回复

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


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

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

dependencies:
  flutter:
    sdk: flutter
  unique_identifier_3: ^4.0.0  # 请注意版本号,使用最新版本

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

接下来,在你的Dart文件中,你可以按照以下步骤使用unique_identifier_3插件来获取设备的唯一标识符:

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

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

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

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

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

  Future<void> _getUniqueIdentifier() async {
    try {
      String? id = await UniqueIdentifier3.getIdentifier;
      setState(() {
        uniqueIdentifier = id;
      });
    } catch (e) {
      print('Error getting unique identifier: $e');
    }
  }

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

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

  1. pubspec.yaml文件中添加了unique_identifier_3插件的依赖。
  2. MyApp组件的initState方法中调用_getUniqueIdentifier函数来获取唯一标识符。
  3. UniqueIdentifier3.getIdentifier是一个异步函数,所以我们使用await关键字等待其返回结果。
  4. 使用setState方法更新UI,显示获取到的唯一标识符。

请注意,在某些平台上获取唯一标识符可能会受到隐私政策的限制,确保你的应用符合相关平台的隐私规定。

希望这个示例对你有所帮助!

回到顶部