Flutter防欺诈检测插件flutter_shieldfraud的使用

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

Flutter防欺诈检测插件flutter_shieldfraud的使用

Flutter插件用于Shield欺诈检测(www.shield.com

Flutter Shield Fraud插件帮助开发者评估移动设备上进行的恶意活动,并基于用户行为返回风险情报。它收集设备指纹、社交指标和网络信息。

开始使用SHIELD SDK有四个步骤:

  1. 集成SDK
  2. 初始化SDK
  3. 获取会话ID
  4. 获取设备结果
  5. 发送自定义属性

集成SDK

SHIELD FLUTTER SDK兼容从1.20.0版本开始支持Flutter的Android和iOS应用。你需要确保在Flutter项目的pubspec.yaml文件中添加flutter_shieldfraud作为依赖项。

dependencies:
  flutter_shieldfraud: ^1.0.13

然后运行flutter packages get或在IntelliJ中更新你的包。

注意:我们不断对欺诈库和检测能力进行增强,包括新功能、错误修复和安全更新。我们建议升级到最新版本的SDK以保护自己免受迅速演化的欺诈风险。你可以参阅Changelog以了解更多信息。

初始化SDK

SDK的初始化应在应用程序生命周期的最早阶段配置,以确保成功生成和处理设备指纹。

你需要SHIELD_SITE_IDSHIELD_SECRET_KEY来初始化SDK。你可以在页面顶部找到它们。

在main.dart文件中覆盖第一个StatefulWidget的State的initState方法,在应用程序启动时初始化Shield。

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> {
  [@override](/user/override)
  void initState() {
    super.initState();
    // 创建Shield配置
    ShieldConfig config = ShieldConfig(siteID: "SHIELD_SITE_ID", key: "SHIELD_SECRET_KEY");
    // 使用Shield配置初始化Shield SDK
    Shield.initShield(config);
  }
}

获取会话ID

会话ID是用户应用会话的唯一标识符,当检索该会话的设备结果时,可以作为参考点。

会话ID遵循操作系统生命周期管理,符合行业最佳实践。这意味着用户的会话将一直保持活跃,直到用户终止应用或设备内存不足必须终止应用。

如果你希望通过后端API检索设备结果,重要的是在你的系统中存储会话ID。你将需要使用此会话ID调用SHIELD后端API。

Shield.sessionId
    .then((sessionId) =>
        print("shield sessionId: $sessionId"));

获取设备结果

SHIELD为您提供可操作的设备智能,您可以通过SDK、优化监听器或自定义拉取方法检索这些信息。你也可以通过后端API检索结果。

警告:任何时候只能使用一种获取设备结果的方法(优化监听器或自定义拉取)。

通过优化监听器检索设备结果

建议:SHIELD推荐使用优化监听器方法减少API调用次数。

我们的SDK将在初始化时捕获初始设备指纹,并且仅在设备指纹发生变化的情况下返回一组额外的设备智能。这确保了真正优化的端到端保护你的生态系统。

如果希望在会话期间被通知设备属性的变化(例如,用户在启动页面后立即激活恶意工具),可以注册一个回调。

在初始化时添加一个额外参数以注册回调。

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    // 创建回调
    ShieldCallback shieldCallback = ShieldCallback((Map<String, dynamic> result) {
      print("device result: $result");
    }, (ShieldError error) {
      print("error: ${error.message}");
    });
    // 将回调传递给ShieldConfig对象
    ShieldConfig config = ShieldConfig(siteID: "SHIELD_SITE_ID", key: "SHIELD_SECRET_KEY", shieldCallback: shieldCallback);
    Shield.initShield(config);
  }
}

通过自定义拉取检索设备结果

你可以在特定的用户检查点或活动(如账户注册、登录或结账)时通过自定义拉取检索设备结果。这样做是为了确保有足够的时间生成设备指纹。

Shield.latestDeviceResult.then((latestDeviceResult) => {
  if (latestDeviceResult == null) {
    print("error ${Shield.latestError?.message}")
  } else {
    print("result $latestDeviceResult")
  }
});

如果getLatestDeviceResult返回null,则表示设备结果检索失败。

发送自定义属性

使用sendAttributes函数发送事件驱动的属性,如user_idactivity_id以增强分析。此函数接受两个参数:触发函数的屏幕名称和以键值对形式提供的数据。

Map<String, String> data = {};
data["key_1"] = "value_1";
data["key_2"] = "value_2";

Shield.sendAttributes("login_screen", data)
    .then((value) => print("successfully sent attributes: $value"));

示例代码

以下是完整的示例代码,展示了如何在Flutter应用中使用flutter_shieldfraud插件。

import 'package:flutter/material.dart';
import 'package:flutter_shieldfraud/plugin_shieldfraud.dart';
import 'package:flutter_shieldfraud/shield_config.dart';
import 'dart:convert';

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 jsonString = "";

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

    initShield();

    Future.delayed(const Duration(seconds: 2), () async {
      Shield.latestDeviceResult.then((latestDeviceResult) => {
            if (latestDeviceResult == null)
              {print("error ${Shield.latestError?.message}")}
            else
              {print("result $latestDeviceResult")}
          });
    });
  }

  Future<void> initShield() async {
    ShieldCallback shieldCallback =
        ShieldCallback((Map<String, dynamic> result) {
      setState(() {
        jsonString = const JsonEncoder.withIndent('  ').convert(result);
      });

      print("callback result: $result");
    }, (ShieldError error) {
      print("callback error: ${error.message}");
    });
    var data = <String, String>{};
    data["user_id"] = "12345";
    final valueInt = await Shield.isShieldInitialized;
    ShieldConfig config = ShieldConfig(
        siteID: "59947973924580a1bf14766e74331641870de57f",
        key: "242236650000000059947973924580a1bf14766e74331641870de57f",
        shieldCallback: shieldCallback,
        environment: ShieldEnvironment.prod,
        logLevel: ShieldLogLevel.debug);
    if (!valueInt) {
      Shield.initShield(config);
      Future.delayed(const Duration(seconds: 2), () async {
        final valueInt = await Shield.isShieldInitialized;
        if (valueInt) {
          Shield.sendAttributes("login", data);
        }
      });
    } else {
      Shield.sendAttributes("login", data);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: const Text('Plugin example app'),
          ),
          body: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Expanded(
                child: Text(jsonString, key: const Key('jsonString')),
              ),
              SizedBox(
                height: 100,
                width: double.infinity,
                child: MaterialButton(
                  onPressed: () {
                    Shield.sendDeviceSignature("test sending device signature")
                        .then((value) => print(
                            "sending device signature in real time successful: $value"));
                  },
                  child: const Text("Send attributes"),
                ),
              ),
            ],
          )),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flutter_shieldfraud插件进行防欺诈检测的示例代码。flutter_shieldfraud是一个用于防止欺诈行为的Flutter插件,它通常集成了一些常见的防欺诈机制,如设备指纹、行为分析等。不过,请注意,由于这是一个假设的插件,实际的API和用法可能会有所不同。你需要参考插件的官方文档来确保准确性。

首先,你需要在你的pubspec.yaml文件中添加这个插件:

dependencies:
  flutter:
    sdk: flutter
  flutter_shieldfraud: ^x.y.z  # 替换为实际的版本号

然后运行flutter pub get来安装插件。

接下来,在你的Flutter应用中初始化并使用这个插件。下面是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Shield Fraud Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final FlutterShieldFraud _flutterShieldFraud = FlutterShieldFraud();

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

  Future<void> _initializeFlutterShieldFraud() async {
    try {
      // 初始化插件,可能需要一些配置,比如API密钥等
      await _flutterShieldFraud.initialize(
        apiKey: 'YOUR_API_KEY',  // 替换为你的API密钥
        // 其他可能的配置参数...
      );

      // 检查设备是否受到欺诈威胁
      bool isFraudDetected = await _flutterShieldFraud.checkFraud();
      if (isFraudDetected) {
        // 处理欺诈检测到的情况,比如显示警告或退出应用
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('Fraud Detected'),
              content: Text('This device has been flagged for potential fraud.'),
              actions: <Widget>[
                TextButton(
                  onPressed: () {
                    Navigator.of(context).pop();
                    // 退出应用或采取其他措施
                    exit(0);
                  },
                  child: Text('Exit'),
                ),
              ],
            );
          },
        );
      } else {
        // 正常处理流程
        print('No fraud detected.');
      }
    } catch (e) {
      // 处理初始化过程中的错误
      print('Error initializing FlutterShieldFraud: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Shield Fraud Demo'),
      ),
      body: Center(
        child: Text('Checking for fraud...'),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了flutter_shieldfraud插件。
  2. MyApp应用的home页面中初始化了FlutterShieldFraud插件。
  3. _initializeFlutterShieldFraud方法中调用了插件的initialize方法来初始化插件,并设置了API密钥(你需要替换为实际的API密钥)。
  4. 调用了checkFraud方法来检查设备是否受到欺诈威胁,并根据结果进行处理。

请注意,这只是一个简单的示例,实际的防欺诈检测可能涉及更多的配置和复杂的逻辑。你需要根据flutter_shieldfraud插件的官方文档来调整和完善代码。

回到顶部