Flutter多设备标识符插件android_multiple_identifier的使用

Flutter多设备标识符插件android_multiple_identifier的使用

简介

android_multiple_identifier 是一个专为 Android 设计的 Flutter 插件,它提供了多种设备唯一标识符供开发者选择,以满足不同的需求。这些标识符包括:

  • ANDROID_ID:通常有效,但并非 100% 可靠。
  • IMEI:每个设备唯一,但仅适用于支持电话服务的设备,主要用于欺诈预防。
  • Serial:每个设备唯一,但仅适用于无电话服务的设备,可能在某些设备上不可用。

该插件通过提供多种选项,帮助开发者根据具体需求选择合适的标识符。


开始使用

1. 添加权限

AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

API 使用说明

Android 平台

首先,确保请求权限,否则应用无法获取 IMEISerial 码:

await AndroidMultipleIdentifier.requestPermission();

然后,可以调用以下方法获取不同的标识符:

String imei = await AndroidMultipleIdentifier.imeiCode;
String serial = await AndroidMultipleIdentifier.serialCode;
String androidID = await AndroidMultipleIdentifier.androidID;

或者,可以通过一次调用获取所有标识符并减少原生调用次数:

Map idMap = await AndroidMultipleIdentifier.idMap;

String imei = idMap["imei"];
String serial = idMap["serial"];
String androidID = idMap["androidId"];
检查权限状态

可以使用以下方法检查权限状态:

bool permissionStatus = await AndroidMultipleIdentifier.checkPermission(); // 权限是否已授予
bool isPermissionRejected = await AndroidMultipleIdentifier.checkPermissionRationale(); // 用户之前是否拒绝了权限
bool setToNeverAskAgain = AndroidMultipleIdentifier.neverAskAgain; // 用户是否设置了不再询问

如果用户拒绝了权限,可以通过以下方法打开设置页面手动修改权限:

AndroidMultipleIdentifier.openSettings();
获取平台版本

如果需要获取当前平台版本,可以使用以下方法:

platformVersion = await AndroidMultipleIdentifier.platformVersion;

iOS 平台

目前,iOS 功能已被禁用。即使将其添加到 pubspec.yaml 文件中,也不会导致应用崩溃。


完整示例代码

以下是一个完整的示例代码,展示如何使用 android_multiple_identifier 插件:

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

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

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

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown'; // 平台版本
  String _imei = 'Unknown'; // IMEI
  String _serial = 'Unknown'; // 序列号
  String _androidID = 'Unknown'; // Android ID
  Map _idMap = Map(); // 所有标识符的映射

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

  // 初始化平台状态
  Future<void> initPlatformState() async {
    String platformVersion;
    String imei;
    String serial;
    String androidID;
    Map idMap;

    try {
      platformVersion = await AndroidMultipleIdentifier.platformVersion;
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 请求权限
    bool requestResponse = await AndroidMultipleIdentifier.requestPermission();
    print("NEVER ASK AGAIN SET TO: ${AndroidMultipleIdentifier.neverAskAgain}");

    try {
      idMap = await AndroidMultipleIdentifier.idMap;
    } catch (e) {
      idMap = Map();
      idMap["imei"] = 'Failed to get IMEI.';
      idMap["serial"] = 'Failed to get Serial Code.';
      idMap["androidId"] = 'Failed to get Android id.';
    }

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
      _idMap = idMap;
      _imei = _idMap["imei"];
      _serial = _idMap["serial"];
      _androidID = _idMap["androidId"];
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('android_multiple_identifier 示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Text(
                '\n运行于: $_platformVersion\n',
                textAlign: TextAlign.center,
              ),
              Text('IMEI: $_imei\n'),
              Text('序列号: $_serial\n'),
              Text('Android ID: $_androidID\n'),
              ElevatedButton(
                child: Text('打开设置'),
                onPressed: () async {
                  AndroidMultipleIdentifier.openSettings();
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


android_multiple_identifier 是一个 Flutter 插件,用于在 Android 设备上获取多个设备标识符,如 IMEI、MEID、Serial Number 等。这个插件可以帮助开发者获取设备的唯一标识符,以便进行设备识别、用户追踪等操作。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  android_multiple_identifier: ^1.0.0

然后运行 flutter pub get 来安装插件。

使用插件

在 Dart 代码中,你可以通过以下步骤来使用 android_multiple_identifier 插件:

  1. 导入插件

    import 'package:android_multiple_identifier/android_multiple_identifier.dart';
    
  2. 获取设备标识符

    你可以使用 AndroidMultipleIdentifier 类来获取设备的 IMEI、MEID、Serial Number 等标识符。

    void getDeviceIdentifiers() async {
      try {
        String imei = await AndroidMultipleIdentifier.imei;
        String meid = await AndroidMultipleIdentifier.meid;
        String serialNumber = await AndroidMultipleIdentifier.serialNumber;
    
        print("IMEI: $imei");
        print("MEID: $meid");
        print("Serial Number: $serialNumber");
      } catch (e) {
        print("Failed to get device identifiers: $e");
      }
    }
    
  3. 处理权限

    在 Android 10 及以上版本,获取设备标识符需要 READ_PHONE_STATE 权限。你需要在 AndroidManifest.xml 文件中添加以下权限声明:

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    此外,你还需要在运行时请求权限。可以使用 permission_handler 插件来请求权限:

    import 'package:permission_handler/permission_handler.dart';
    
    void requestPermissions() async {
      var status = await Permission.phone.status;
      if (!status.isGranted) {
        await Permission.phone.request();
      }
    }
    

    在调用 getDeviceIdentifiers 之前,确保已经请求并获得了权限。

示例代码

以下是一个完整的示例代码,展示了如何使用 android_multiple_identifier 插件获取设备标识符:

import 'package:flutter/material.dart';
import 'package:android_multiple_identifier/android_multiple_identifier.dart';
import 'package:permission_handler/permission_handler.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Device Identifiers'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              await requestPermissions();
              getDeviceIdentifiers();
            },
            child: Text('Get Device Identifiers'),
          ),
        ),
      ),
    );
  }

  void getDeviceIdentifiers() async {
    try {
      String imei = await AndroidMultipleIdentifier.imei;
      String meid = await AndroidMultipleIdentifier.meid;
      String serialNumber = await AndroidMultipleIdentifier.serialNumber;

      print("IMEI: $imei");
      print("MEID: $meid");
      print("Serial Number: $serialNumber");
    } catch (e) {
      print("Failed to get device identifiers: $e");
    }
  }

  void requestPermissions() async {
    var status = await Permission.phone.status;
    if (!status.isGranted) {
      await Permission.phone.request();
    }
  }
}
回到顶部