media_drm_id 0.0.3 copy "media_drm_id: ^0.0.3" to clipboard
media_drm_id: ^0.0.3 copied to clipboard

PlatformAndroid

A Flutter plugin to retrieve Android MediaDrm device ID securely.

media_drm_id #

A Flutter plugin to securely retrieve the Android MediaDrm device ID (Widevine UUID).


Overview #

Starting from Android 10 (API level 29), access to traditional hardware identifiers like IMEI and serial number has been heavily restricted for privacy reasons. To uniquely identify devices, Android provides the MediaDrm API which returns a consistent, unique device identifier tied to the hardware’s DRM capabilities.

This plugin exposes the MediaDrm device ID in Flutter apps, enabling developers to:

  • Obtain a reliable unique device ID on Android 10+
  • Avoid deprecated or restricted device ID methods
  • Use a hardware-backed, non-resettable identifier suitable for licensing, anti-fraud, or device management purposes

Additional Notes #

  • The MediaDrm device ID does not change if the app is uninstalled or reinstalled.
  • It is hardware-backed and survives factory resets in most cases, making it reliable for persistent device identification.

Features #

  • Retrieve MediaDrm device ID using Widevine UUID
  • Supports Android 10 (API 29) and above
  • Lightweight and easy-to-use Flutter plugin
  • No additional native setup required

Getting Started #

Installation #

Add media_drm_id as a dependency in your pubspec.yaml:

dependencies:
  media_drm_id: ^0.0.3

Then run:

flutter pub get

Import the Package

import 'package:media_drm_id/media_drm_id.dart';
Usage Example
import 'package:flutter/material.dart';
import 'package:media_drm_id/media_drm_id.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  State<MyApp> createState() => _MyAppState();
}

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

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

  Future<void> _fetchDeviceId() async {
    String id;
    try {
      id = await MediaDrmId.getId();
    } catch (e) {
      id = 'Failed to get device ID: $e';
    }
    setState(() {
      _deviceId = id;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('MediaDrm Device ID Example')),
        body: Center(
          child: Text(_deviceId ?? 'Loading...'),
        ),
      ),
    );
  }
}

Android Setup

No additional setup is required on the Android side since this plugin uses the official MediaDrm API.

Make sure your app's minSdkVersion is set to at least 29 (Android 10):

In android/app/build.gradle:

android { defaultConfig { minSdkVersion 29 // other config } } How It Works (Technical Details)

This plugin accesses Android’s MediaDrm API with the Widevine UUID:

UUID WIDEVINE_UUID = new UUID(0xedef8ba979d64aceL, 0xa3c827dcd51d21edL); MediaDrm mediaDrm = new MediaDrm(WIDEVINE_UUID); byte[] deviceId = mediaDrm.getPropertyByteArray("deviceUniqueId"); The returned byte array is converted to a hex string for use in Flutter.

This ID is hardware-backed, consistent across app installs, and resistant to factory resets.

It’s ideal for apps requiring a persistent unique device identifier without requesting sensitive permissions.

3
likes
145
points
63
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin to retrieve Android MediaDrm device ID securely.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on media_drm_id

Packages that implement media_drm_id