Flutter唯一标识符获取插件unique_identifier_3的使用
Flutter唯一标识符获取插件unique_identifier_3的使用
一个用于从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位十六进制字符串,与每个应用程序签名密钥、用户和设备的组合相关联。该值可能在工厂重置后或应用程序签名密钥更改后发生变化。 - iOS:
identifierForVendor
(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
更多关于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),
),
],
),
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 在
pubspec.yaml
文件中添加了unique_identifier_3
插件的依赖。 - 在
MyApp
组件的initState
方法中调用_getUniqueIdentifier
函数来获取唯一标识符。 UniqueIdentifier3.getIdentifier
是一个异步函数,所以我们使用await
关键字等待其返回结果。- 使用
setState
方法更新UI,显示获取到的唯一标识符。
请注意,在某些平台上获取唯一标识符可能会受到隐私政策的限制,确保你的应用符合相关平台的隐私规定。
希望这个示例对你有所帮助!