Flutter iOS安全套件插件flutter_ios_security_suite的使用

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

Flutter iOS安全套件插件flutter_ios_security_suite的使用

pub License: MIT Github issues contributions welcome

一个集成iOS安全套件(IOSSecuritySuite)的Flutter插件,为Flutter应用提供增强的安全功能。

功能

该Flutter插件提供了以下安全检查:

  • amIJailbroken():检查设备是否已越狱。
  • amIDebugged():检测应用程序是否正在被调试。
  • amIReverseEngineered():确定应用程序是否已被反向工程。

安装与使用

步骤1:添加依赖

在你的pubspec.yaml文件中添加此依赖项:

dependencies:
  flutter_ios_security_suite: ^0.0.2

步骤2:更新Info.plist

在你的Flutter iOS项目的Info.plist文件中添加以下内容:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>undecimus</string>
    <string>sileo</string>
    <string>zbra</string>
    <string>filza</string>
    <string>activator</string>
</array>

步骤3:导入包

在你的Dart代码中添加以下导入语句:

import 'package:flutter_ios_security_suite/flutter_ios_security_suite.dart';

步骤4:调用函数

final _flutterIosSecuritySuitePlugin = FlutterIosSecuritySuite();

bool? amIJailbroken = await _flutterIosSecuritySuitePlugin.amIJailbroken();
bool? amIDebugged = await _flutterIosSecuritySuitePlugin.amIDebugged();
bool? amIReverseEngineered = await _flutterIosSecuritySuitePlugin.amIReverseEngineered();

示例代码

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

import 'package:flutter_ios_security_suite/flutter_ios_security_suite.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String amIJailbroken = '未知';
  String amIDebugged = '未知';
  String amIReverseEngineered = '未知';

  final _flutterIosSecuritySuitePlugin = FlutterIosSecuritySuite();

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

  // 平台消息是异步的,因此我们在异步方法中进行初始化。
  Future<void> initPlatformState() async {
    if (!mounted) return;

    bool? amIJailbroken = await _flutterIosSecuritySuitePlugin.amIJailbroken();
    bool? amIDebugged = await _flutterIosSecuritySuitePlugin.amIDebugged();
    bool? amIReverseEngineered =
        await _flutterIosSecuritySuitePlugin.amIReverseEngineered();

    setState(() {
      // 如果为空则设置错误或相应的值
      this.amIJailbroken = amIJailbroken == null
          ? '错误'
          : amIJailbroken
              ? '是'
              : '否';

      this.amIDebugged = amIDebugged == null
          ? '错误'
          : amIDebugged
              ? '是'
              : '否';
      this.amIReverseEngineered = amIReverseEngineered == null
          ? '错误'
          : amIReverseEngineered
              ? '是'
              : '否';
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: const Text('插件示例应用'),
          ),
          body: SizedBox(
            width: double.infinity,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              mainAxisSize: MainAxisSize.max,
              children: [
                Text('设备是否已越狱: $amIJailbroken\n'),
                Text('应用程序是否正在被调试: $amIDebugged\n'),
                Text('应用程序是否已被反向工程: $amIReverseEngineered\n'),
              ],
            ),
          )),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用flutter_ios_security_suite插件的示例代码。这个插件提供了一系列用于iOS设备安全的功能,比如钥匙串访问、设备唯一标识符获取等。

1. 添加依赖

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

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

然后运行flutter pub get来安装依赖。

2. 配置iOS项目

由于flutter_ios_security_suite是一个针对iOS的插件,你需要确保你的Flutter项目已经配置了iOS平台。通常,这包括在ios/目录下有一个Xcode项目。

3. 使用插件

接下来,你可以在你的Flutter代码中导入并使用这个插件。以下是一个简单的示例,展示如何获取和存储钥匙串数据以及获取设备唯一标识符。

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

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

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

class _MyAppState extends State<MyApp> {
  String _keychainValue = "";
  String _deviceId = "";

  @override
  void initState() {
    super.initState();
    _retrieveKeychainValue();
    _retrieveDeviceId();
  }

  Future<void> _retrieveKeychainValue() async {
    try {
      String value = await FlutterIosSecuritySuite.getKeychainValue(
        service: "com.example.app",
        account: "user_token",
      );
      setState(() {
        _keychainValue = value ?? "No value found";
      });
    } catch (e) {
      print("Error retrieving keychain value: $e");
    }
  }

  Future<void> _storeKeychainValue() async {
    try {
      await FlutterIosSecuritySuite.setKeychainValue(
        service: "com.example.app",
        account: "user_token",
        value: "example_token_12345",
      );
      print("Keychain value stored successfully");
      _retrieveKeychainValue(); // Optionally refresh the displayed value
    } catch (e) {
      print("Error storing keychain value: $e");
    }
  }

  Future<void> _retrieveDeviceId() async {
    try {
      String id = await FlutterIosSecuritySuite.getDeviceId();
      setState(() {
        _deviceId = id;
      });
    } catch (e) {
      print("Error retrieving device ID: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter iOS Security Suite Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text("Keychain Value:", style: TextStyle(fontSize: 18)),
              Text(_keychainValue, style: TextStyle(fontSize: 16)),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _storeKeychainValue,
                child: Text("Store Keychain Value"),
              ),
              SizedBox(height: 20),
              Text("Device ID:", style: TextStyle(fontSize: 18)),
              Text(_deviceId, style: TextStyle(fontSize: 16)),
            ],
          ),
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加依赖并运行flutter pub get
  2. 初始化:在initState方法中调用_retrieveKeychainValue_retrieveDeviceId方法来初始化状态。
  3. 获取钥匙串值:使用FlutterIosSecuritySuite.getKeychainValue方法从钥匙串中获取值。
  4. 存储钥匙串值:使用FlutterIosSecuritySuite.setKeychainValue方法存储值到钥匙串中。
  5. 获取设备ID:使用FlutterIosSecuritySuite.getDeviceId方法获取设备的唯一标识符。

这个示例展示了如何使用flutter_ios_security_suite插件进行基本的钥匙串操作和获取设备ID。根据你的具体需求,你可以进一步扩展和自定义这些功能。

回到顶部