Flutter Device Security
A comprehensive Flutter plugin for checking device security features across Android and iOS platforms. This plugin helps you verify various security aspects of the user's device to ensure a secure environment for your application.
Features
- 🔒 Device Lock Detection: Check if the device has a passcode, PIN, pattern, or password set
- 👆 Biometric Authentication (Android): Verify if biometric authentication is available and enabled
- 🔧 USB Debugging Detection (Android): Check if USB debugging is enabled
- 📱 Device Version Verification: Validate if the device OS version meets minimum requirements
- 🎯 Platform-Specific: Optimized for both Android and iOS with platform-appropriate checks
- 🚀 Easy Integration: Simple API with comprehensive error handling
Supported Platforms
| Feature | Android | iOS |
|---|---|---|
| Device Lock (PIN/Pattern/Password) | ✅ | ✅ |
| Biometric Authentication | ✅ | ❌ |
| USB Debugging Detection | ✅ | ❌ |
| Device Version Verification | ✅ | ✅ |
Installation
Add this to your package's pubspec.yaml file:
dependencies:
flutter_device_security: ^0.0.1
Then run:
flutter pub get
Usage
Basic Usage
import 'package:flutter_device_security/flutter_device_security.dart';
class MySecurityCheck {
final flutterDeviceSecurity = FlutterDeviceSecurity();
Future<void> checkDeviceSecurity() async {
try {
final deviceSecurity = await flutterDeviceSecurity.checkDeviceSecurity();
print('Has Passcode: ${deviceSecurity.passcode}');
print('Version OK: ${deviceSecurity.version}');
// Android-specific checks
if (deviceSecurity is AndroidDeviceSecurity) {
print('Has Biometric: ${deviceSecurity.biometric}');
print('USB Debugging: ${deviceSecurity.usbDebugging}');
}
} catch (e) {
print('Error checking device security: $e');
}
}
}
Advanced Usage with Minimum Version
Future<void> checkDeviceSecurityWithMinVersion() async {
try {
final deviceSecurity = await flutterDeviceSecurity.checkDeviceSecurity(
minimumVersion: "10.0", // Specify minimum OS version
);
// Handle the results...
} catch (e) {
print('Error: $e');
}
}
Complete Example with UI
import 'package:flutter/material.dart';
import 'package:flutter_device_security/flutter_device_security.dart';
import 'package:flutter_device_security/src/models/device_security.dart';
class SecurityCheckScreen extends StatefulWidget {
@override
_SecurityCheckScreenState createState() => _SecurityCheckScreenState();
}
class _SecurityCheckScreenState extends State<SecurityCheckScreen> {
final flutterDeviceSecurity = FlutterDeviceSecurity();
DeviceSecurity? deviceSecurity;
bool isLoading = false;
Future<void> performSecurityCheck() async {
setState(() {
isLoading = true;
});
try {
final security = await flutterDeviceSecurity.checkDeviceSecurity();
setState(() {
deviceSecurity = security;
});
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error: $e')),
);
} finally {
setState(() {
isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Device Security Check')),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
if (isLoading) CircularProgressIndicator(),
if (deviceSecurity != null) ...[
SecurityTile(
title: 'Device Lock',
isSecure: deviceSecurity!.passcode ?? false,
icon: Icons.lock,
),
SecurityTile(
title: 'Version Up to Date',
isSecure: deviceSecurity!.version ?? false,
icon: Icons.system_update,
),
if (deviceSecurity is AndroidDeviceSecurity) ...[
SecurityTile(
title: 'Biometric Available',
isSecure: (deviceSecurity as AndroidDeviceSecurity).biometric ?? false,
icon: Icons.fingerprint,
),
SecurityTile(
title: 'USB Debugging Off',
isSecure: !((deviceSecurity as AndroidDeviceSecurity).usbDebugging ?? false),
icon: Icons.usb,
),
],
],
Spacer(),
ElevatedButton(
onPressed: performSecurityCheck,
child: Text('Check Device Security'),
),
],
),
),
);
}
}
class SecurityTile extends StatelessWidget {
final String title;
final bool isSecure;
final IconData icon;
const SecurityTile({
Key? key,
required this.title,
required this.isSecure,
required this.icon,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ListTile(
leading: Icon(
icon,
color: isSecure ? Colors.green : Colors.red,
),
title: Text(title),
trailing: Icon(
isSecure ? Icons.check_circle : Icons.error,
color: isSecure ? Colors.green : Colors.red,
),
);
}
}
API Reference
FlutterDeviceSecurity
Main class for device security checks.
Methods
checkDeviceSecurity({String? minimumVersion})
Performs a comprehensive device security check.
Parameters:
minimumVersion(optional): Minimum OS version to check against
Returns: Future<DeviceSecurity> - Platform-specific device security information
Throws: Exception if security check fails
DeviceSecurity Models
DeviceSecurity (Abstract Base Class)
Base class for all device security information.
Properties:
bool? passcode- Whether device has lock screen protectionbool? version- Whether device OS version meets requirements
AndroidDeviceSecurity extends DeviceSecurity
Android-specific security information.
Additional Properties:
bool? biometric- Whether biometric authentication is availablebool? usbDebugging- Whether USB debugging is enabled
IOSDeviceSecurity extends DeviceSecurity
iOS-specific security information (inherits base properties only).
Security Considerations
This plugin helps identify potential security risks:
🔴 High Risk Indicators
- No device lock (passcode/PIN/pattern)
- USB debugging enabled (Android)
- Outdated OS version
🟡 Medium Risk Indicators
- No biometric authentication (Android)
🟢 Secure Configuration
- Device lock enabled
- USB debugging disabled
- Up-to-date OS version
- Biometric authentication available
Platform Implementation Details
Android
- Uses Android Keystore and DevicePolicyManager APIs
- Checks for various lock types (PIN, pattern, password, biometric)
- Detects developer options and USB debugging status
- Validates Android API level and security patch level
iOS
- Uses LocalAuthentication framework
- Checks for passcode and biometric availability
- Validates iOS version requirements
- Respects iOS privacy and security guidelines
License
This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ for Flutter developers who prioritize security.
Libraries
- flutter_device_security
- A Flutter plugin for checking device security features.
- flutter_device_security_method_channel
- flutter_device_security_platform_interface