Flutter应用克隆检测插件app_clone_checker的使用

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

Flutter应用克隆检测插件app_clone_checker的使用

app_clone_checker 是一个用于检测Flutter应用是否被克隆的新插件。它目前仅支持Android平台。

使用方法

首先,确保在项目的 pubspec.yaml 文件中添加依赖:

dependencies:
  app_clone_checker: ^版本号

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

接下来,你可以通过以下方式调用插件来检测应用是否被克隆:

await AppCloneChecker.appOriginality("你的包名")

成功响应

如果应用未被克隆,插件将返回成功响应:

{
    "result" : "Success",
    "message" : "Valid App"
}

失败响应

如果应用被克隆或包名未传递,插件将返回失败响应:

{
    "result" : "Failure",
    "message" : "Cloned / In-Valid App" / "Application ID Not Passed"
}

完整示例代码

下面是一个完整的示例代码,展示了如何在Flutter应用中集成并使用 app_clone_checker 插件。

import 'dart:async';

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

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

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

class _MyAppState extends State<MyApp> {
  String _platformVersion = '未知';
  dynamic _appOriginality = '未知';

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

  // 平台消息是异步的,所以我们初始化在一个异步方法中。
  Future<void> initPlatformState() async {
    String platformVersion;
    // 平台消息可能会失败,所以我们使用一个try/catch PlatformException。
    // 我们还处理消息可能返回null的情况。
    try {
      platformVersion = await AppCloneChecker.platformVersion ?? '未知平台版本';
    } on PlatformException {
      platformVersion = '获取平台版本失败。';
    }

    // 如果小部件从树中移除而异步平台消息还在飞行中,我们希望丢弃回复而不是调用
    // setState来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  // 平台消息是异步的,所以我们初始化在一个异步方法中。
  Future<void> checkAppValid() async {
    dynamic pluginResponse;
    // 平台消息可能会失败,所以我们使用一个try/catch PlatformException。
    // 我们还处理消息可能返回null的情况。
    try {
      pluginResponse = await AppCloneChecker.appOriginality(
          "com.example.your_package_name", // 替换为你的包名
          isWorkProfileAllowed: false);

      var resultData = ResultData.fromJson(pluginResponse);
      pluginResponse = resultData.message;
    } on PlatformException {
      pluginResponse = '获取结果失败。';
    }

    // 如果小部件从树中移除而异步平台消息还在飞行中,我们希望丢弃回复而不是调用
    // setState来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() {
      _appOriginality = pluginResponse;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('应用克隆检测器'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text('运行于: $_platformVersion\n'),
            const SizedBox(height: 25,),
            Center(child: Text('原版 / 克隆版 : $_appOriginality\n', textAlign: TextAlign.center,)),
          ],
        ),
      ),
    );
  }
}

// 定义ResultData类用于解析插件响应数据
class ResultData {
  ResultData({
    this.result,
    this.message,
  });

  ResultData.fromJson(dynamic json) {
    result = json['result'];
    message = json['message'];
  }

  String? result;
  String? message;

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['result'] = result;
    map['message'] = message;
    return map;
  }
}

更多关于Flutter应用克隆检测插件app_clone_checker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用克隆检测插件app_clone_checker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用app_clone_checker插件进行应用克隆检测的示例代码。这个插件可以帮助你检测应用是否被克隆或篡改。

首先,确保你已经在pubspec.yaml文件中添加了app_clone_checker依赖:

dependencies:
  flutter:
    sdk: flutter
  app_clone_checker: ^latest_version  # 替换为实际的最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用app_clone_checker插件:

  1. 导入插件

在你的Dart文件中(例如main.dart),导入app_clone_checker插件:

import 'package:app_clone_checker/app_clone_checker.dart';
  1. 初始化插件并检查克隆

在应用的初始化部分(例如在MaterialAppCupertinoApp的构建函数之前),调用插件的方法来检查应用是否被克隆。

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 检查应用克隆
  AppCloneChecker.checkAppClone().then((result) {
    if (result.isCloned) {
      // 应用被克隆或篡改
      print("应用被克隆或篡改: ${result.details}");
      // 你可以在这里显示警告消息,退出应用,或者采取其他措施
    } else {
      // 应用未被克隆或篡改
      print("应用未被克隆或篡改");
      // 继续运行应用
      runApp(MyApp());
    }
  }).catchError((error) {
    // 处理错误
    print("检查应用克隆时出错: $error");
    // 仍然可以运行应用,但可能需要通知用户检查失败
    runApp(MyApp());
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('应用克隆检测示例'),
        ),
        body: Center(
          child: Text('检查中...'),
        ),
      ),
    );
  }
}

在这个示例中,AppCloneChecker.checkAppClone()方法会返回一个Future,该Future解析为一个包含克隆检测结果的AppCloneCheckResult对象。你可以根据isCloned属性来判断应用是否被克隆或篡改,并根据需要采取相应的措施。

请注意,app_clone_checker插件的实现可能依赖于特定的平台特性(如Android的签名验证),因此在实际使用中,你可能需要根据你的具体需求和目标平台来调整代码。此外,由于插件的实现细节和API可能会随着版本的更新而变化,建议查阅插件的官方文档以获取最新的使用指南和API参考。

回到顶部