Flutter设备身份识别插件device_identity的使用

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

Flutter设备身份识别插件device_identity的使用

用于获取设备标识的插件(androidId、Imei、oaid等)

安装

device_identity: latestVersion

使用

只能在Android平台调用(注:插件已经对平台做了条件判断)

  • 同意协议后调用
await DeviceIdentity.register();
  • 获取安卓ID,可能为空
String androidId = await DeviceIdentity.androidId;
  • 获取IMEI,只支持Android 10之前的系统,需要READ_PHONE_STATE权限,可能为空
String imei = await DeviceIdentity.imei;
  • 获取OAID/AAID
String oaid = await DeviceIdentity.oaid;
  • 获取UA
String ua = await DeviceIdentity.ua;

注意

  1. android/app/build.gradle 中将 minSdkVersion 设置为 19(或大于19)

后续计划

  • iOS端idfa的获取

感谢

Android_CN_OAID 提供的SDK

完整示例代码

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

import 'package:device_identity/device_identity.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

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

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    register();
  }

  /// 同意协议时调用
  Future<void> register() async {
    await DeviceIdentity.register();
  }

  /// 获取AndroidId
  Future<void> getAndroidId() async {
    String androidId = await DeviceIdentity.androidId;
    print("getAndroidId:$androidId");
  }

  /// 获取imei
  Future<void> getImei() async {
    String imei = await DeviceIdentity.imei;
    print("getImei:$imei");
  }

  /// 获取oaid
  Future<void> getOaid() async {
    String oaid = await DeviceIdentity.oaid;
    print("getOaid:$oaid");
  }

  /// 获取ua
  Future<void> getUa() async {
    String ua = await DeviceIdentity.ua;
    print("getUa:$ua");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: SingleChildScrollView(
            child: Column(
              children: [
                ElevatedButton(
                    onPressed: getAndroidId, child: const Text("获取AndroidId")),
                const SizedBox(
                  height: 20,
                ),
                ElevatedButton(onPressed: getImei, child: const Text("获取imei")),
                const SizedBox(
                  height: 20,
                ),
                ElevatedButton(onPressed: getOaid, child: const Text("获取oaid")),
                const SizedBox(
                  height: 20,
                ),
                ElevatedButton(onPressed: getUa, child: const Text("获取ua")),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用device_identity插件来获取设备身份信息的代码示例。device_identity插件允许你获取设备的唯一标识符,这对于设备跟踪、用户认证等场景非常有用。

首先,你需要在你的Flutter项目的pubspec.yaml文件中添加device_identity依赖:

dependencies:
  flutter:
    sdk: flutter
  device_identity: ^0.4.0+4  # 请检查最新版本号

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

接下来,在你的Dart代码中,你可以按照以下方式使用device_identity插件:

import 'package:flutter/material.dart';
import 'package:device_identity/device_identity.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 {
      // 获取设备身份信息
      DeviceInfo deviceInfo = await DeviceIdentity.getDeviceInfo();
      
      // 通常,你会使用deviceInfo中的某个唯一标识符
      // 这里假设我们使用deviceInfo.androidId(对于Android设备)或deviceInfo.identifierForVendor(对于iOS设备)
      String? id;
      if (Platform.isAndroid) {
        id = deviceInfo.androidId;
      } else if (Platform.isIOS) {
        id = deviceInfo.identifierForVendor;
      }

      // 更新状态
      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 Identity 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),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个Flutter应用,该应用在启动时调用_getDeviceId函数来获取设备的唯一标识符。根据设备的平台(Android或iOS),我们选择不同的标识符(androidIdidentifierForVendor)。然后,我们将获取到的设备ID显示在屏幕上。

请注意,device_identity插件获取的设备ID在不同的平台上可能会有所不同,并且某些ID可能会因为用户重置设备或隐私设置而发生变化。因此,在使用这些ID时,请务必考虑到这些限制和潜在的变化。

此外,根据最新的隐私政策和法规(如GDPR和苹果的App Tracking Transparency),获取和使用设备ID可能会受到一些限制。确保你的应用符合所有适用的法律和隐私政策要求。

回到顶部