Flutter设备安全检测插件safe_device的使用

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

Flutter设备安全检测插件safe_device的使用

safe_device (Null-Safety)

Safe Device Safe Device

safe_device 是一个用于Flutter应用的安全检测插件,它可以检测设备是否越狱(Jailbroken)、是否为模拟器、是否启用了模拟位置等功能。这些功能对于确保应用程序的安全性和完整性非常重要。

开始使用

在你的Flutter项目中添加依赖:

dependencies:
  ...
  safe_device: ^1.2.0

使用方法

导入包

import 'package:safe_device/safe_device.dart';

检测设备状态

以下是几种常见的设备安全检查方法:

  • 检查设备是否越狱(适用于iOS/Android):

    bool isJailBroken = await SafeDevice.isJailBroken;
    
  • 检查设备是否为真实设备而非模拟器

    bool isRealDevice = await SafeDevice.isRealDevice;
    
  • 检查设备是否可以模拟位置(无需root权限):

    bool isMockLocation = await SafeDevice.isMockLocation;
    
  • (仅限Android)检查应用是否运行在外置存储上

    bool isOnExternalStorage = await SafeDevice.isOnExternalStorage;
    
  • 检查设备是否违反了上述任何一项规则

    bool isSafeDevice = await SafeDevice.isSafeDevice;
    
  • (仅限Android)检查设备是否启用了开发者选项

    bool isDevelopmentModeEnable = await SafeDevice.isDevelopmentModeEnable;
    

注意事项

  • 模拟位置检测

    • Android:需要授予应用定位权限以正确检测模拟位置。
    • iOS:目前我们只检查设备是否越狱或是否为非真实设备。对于iOS,还没有更强的模拟位置检测方法。(如果有更好的方法,请提交PR)
  • 开发者选项

    • 在模拟器中,默认情况下开发者选项总是启用的。

示例代码

以下是一个完整的示例代码,展示了如何使用 safe_device 插件来检测设备的安全状态,并将结果显示在界面上。

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:safe_device/safe_device.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isJailBroken = false;
  bool isMockLocation = false;
  bool isRealDevice = false;
  bool isOnExternalStorage = false;
  bool isSafeDevice = false;
  bool isDevelopmentModeEnable = false;

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

  Future<void> initPlatformState() async {
    try {
      LocationPermission permission;
      permission = await Geolocator.checkPermission();
      if (permission == LocationPermission.denied) {
        permission = await Geolocator.requestPermission();
        if (permission == LocationPermission.denied) {
          return Future.error('Location permissions are denied');
        }
      }
      isJailBroken = await SafeDevice.isJailBroken;
      isMockLocation = await SafeDevice.isMockLocation;
      isRealDevice = await SafeDevice.isRealDevice;
      isOnExternalStorage = await SafeDevice.isOnExternalStorage;
      isSafeDevice = await SafeDevice.isSafeDevice;
      isDevelopmentModeEnable = await SafeDevice.isDevelopmentModeEnable;
      setState(() {});
    } catch (error) {
      print(error);
    }
  }

  Widget buildInfoRow(String label, bool value) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('$label:'),
        SizedBox(width: 8),
        Text(
          value ? "Yes" : "No",
          style: TextStyle(fontWeight: FontWeight.w600),
        ),
      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Device Safe Check'),
        ),
        body: Center(
          child: Card(
            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  buildInfoRow('isJailBroken()', isJailBroken),
                  SizedBox(height: 8),
                  buildInfoRow('isMockLocation()', isMockLocation),
                  SizedBox(height: 8),
                  buildInfoRow('isRealDevice()', isRealDevice),
                  SizedBox(height: 8),
                  buildInfoRow('isOnExternalStorage()', isOnExternalStorage),
                  SizedBox(height: 8),
                  buildInfoRow('isSafeDevice()', isSafeDevice),
                  SizedBox(height: 8),
                  buildInfoRow(
                      'isDevelopmentModeEnable()', isDevelopmentModeEnable),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

这个示例代码会在启动时自动检测设备的各种安全状态,并将结果显示在一个卡片中。你可以根据需要修改和扩展这个示例,以适应你的具体应用场景。

希望这些信息能帮助你更好地理解和使用 safe_device 插件!如果有任何问题或建议,欢迎随时提问。


更多关于Flutter设备安全检测插件safe_device的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter设备安全检测插件safe_device的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用safe_device插件来进行设备安全检测的示例代码。safe_device插件通常用于检查设备是否已被root、是否启用了调试模式等安全相关信息。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  safe_device: ^x.y.z  # 请替换为最新版本号

2. 导入插件

在你的Dart文件中(通常是main.dart或者一个专门用于安全检测的页面),导入safe_device插件:

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

3. 使用插件

你可以创建一个页面来显示设备安全检测的结果。以下是一个简单的示例:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SafeDeviceScreen(),
    );
  }
}

class SafeDeviceScreen extends StatefulWidget {
  @override
  _SafeDeviceScreenState createState() => _SafeDeviceScreenState();
}

class _SafeDeviceScreenState extends State<SafeDeviceScreen> {
  String _deviceStatus = "Checking...";

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

  Future<void> _checkDeviceSecurity() async {
    try {
      bool isRooted = await SafeDevice.isRooted;
      bool isEmulator = await SafeDevice.isEmulator;
      bool isDebuggable = await SafeDevice.isDebuggable;

      setState(() {
        _deviceStatus = "Root: ${isRooted.toString()}\n"
            "Emulator: ${isEmulator.toString()}\n"
            "Debuggable: ${isDebuggable.toString()}";
      });
    } catch (e) {
      setState(() {
        _deviceStatus = "Error: ${e.toString()}";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Device Security Check'),
      ),
      body: Center(
        child: Text(_deviceStatus),
      ),
    );
  }
}

4. 运行应用

确保你已经连接了Flutter开发环境(如Android模拟器或物理设备),然后运行应用:

flutter run

代码解释

  • 依赖添加:在pubspec.yaml中添加safe_device依赖。
  • 导入插件:在Dart文件中导入safe_device包。
  • 状态管理:使用StatefulWidget来管理设备安全状态。
  • 安全检测:在initState方法中调用_checkDeviceSecurity方法,该方法异步获取设备的安全状态(是否root、是否模拟器、是否可调试),并更新UI。
  • UI展示:在UI中展示设备的安全状态。

这个示例展示了如何使用safe_device插件进行基本的设备安全检测,并在UI中显示检测结果。你可以根据实际需求扩展这个示例,比如添加更多的安全检测项或者将检测结果以更友好的方式展示给用户。

回到顶部