device_id_all 0.0.4 copy "device_id_all: ^0.0.4" to clipboard
device_id_all: ^0.0.4 copied to clipboard

Best-effort Flutter plugin for Android and iOS device identifiers, including Android ID, OAID, GAID, IDFA and app UUID.

example/lib/main.dart

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:device_id_all/device_id_all.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  DeviceIdentifierInfo? _identifiers;
  IosTrackingAuthorizationStatus? _trackingStatus;
  String? _errorMessage;
  bool _requestingTracking = false;
  final _deviceIdAllPlugin = DeviceIdAll();

  @override
  void initState() {
    super.initState();
    initPlatformState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Future<void>.delayed(const Duration(milliseconds: 600), () {
        if (mounted) {
          requestTrackingAndRefresh();
        }
      });
    });
  }

  // 平台通道是异步的,初始化时读取一次所有标识。
  Future<void> initPlatformState() async {
    DeviceIdentifierInfo? identifiers;
    IosTrackingAuthorizationStatus? trackingStatus;
    String? errorMessage;
    try {
      trackingStatus = await _deviceIdAllPlugin
          .getIosTrackingAuthorizationStatus();
      identifiers = await _deviceIdAllPlugin.getAllDeviceIdentifiers();
    } on PlatformException catch (error) {
      errorMessage = error.message ?? error.code;
    }

    if (!mounted) return;

    setState(() {
      _identifiers = identifiers;
      _trackingStatus = trackingStatus;
      _errorMessage = errorMessage;
    });
  }

  Future<void> requestTrackingAndRefresh() async {
    if (_requestingTracking) return;

    setState(() {
      _requestingTracking = true;
      _errorMessage = null;
    });

    try {
      final trackingStatus = await _deviceIdAllPlugin
          .requestIosTrackingAuthorization();
      final identifiers = await _deviceIdAllPlugin.getAllDeviceIdentifiers();

      if (!mounted) return;

      setState(() {
        _trackingStatus = trackingStatus;
        _identifiers = identifiers;
      });
    } on PlatformException catch (error) {
      if (!mounted) return;

      setState(() {
        _errorMessage = error.message ?? error.code;
      });
    } finally {
      if (mounted) {
        setState(() {
          _requestingTracking = false;
        });
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Device ID All')),
        body: ListView(
          padding: const EdgeInsets.all(16),
          children: [
            if (_errorMessage != null)
              Text(
                _errorMessage!,
                style: TextStyle(color: Theme.of(context).colorScheme.error),
              )
            else if (_identifiers == null)
              const Text('读取中...')
            else ...[
              Text('trackingStatus: ${_trackingStatus?.name ?? 'unknown'}'),
              const SizedBox(height: 12),
              ElevatedButton(
                onPressed: _requestingTracking
                    ? null
                    : requestTrackingAndRefresh,
                child: Text(_requestingTracking ? '请求中...' : '请求 IDFA 授权'),
              ),
              const SizedBox(height: 12),
              ..._identifiers!.toMap().entries.map(
                (entry) => Padding(
                  padding: const EdgeInsets.symmetric(vertical: 8),
                  child: SelectableText(
                    '${entry.key}: ${entry.value ?? 'null'}',
                  ),
                ),
              ),
            ],
          ],
        ),
      ),
    );
  }
}
1
likes
135
points
223
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Best-effort Flutter plugin for Android and iOS device identifiers, including Android ID, OAID, GAID, IDFA and app UUID.

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on device_id_all

Packages that implement device_id_all