Flutter防欺诈验证插件flutter_shieldfraud_adv的使用

Flutter防欺诈验证插件flutter_shieldfraud_adv的使用

Flutter插件用于Shield Fraud(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_adv作为依赖项。

dependencies:
  flutter_shieldfraud_adv: ^1.0.0

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

注意:我们对欺诈库和检测能力进行持续改进,包括新功能、错误修复和安全更新。建议升级到最新版本的SDK以防止快速演变的欺诈风险。你可以查阅变更日志了解更多详细信息。

初始化SDK

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

你需要SHIELD_SITE_ID和SHIELD_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通过以下两种方式之一获取这些信息:

  1. 优化监听器
  2. 定制拉取方法

您还可以通过后端API检索结果。

警告:在任何给定时间点,只能使用一种方法(优化监听器或定制拉取)来获取设备结果。

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

SHIELD推荐优化监听器方法以减少API调用次数

我们的SDK将在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_id或activity_id以增强分析。该函数接受两个参数:触发函数的屏幕名称和以键值对形式提供任何自定义字段的数据。

Map<String, String> data = HashMap();
data["key_1"] = "value_1";
data["key_2"] = "value_2";

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

完整示例代码

以下是完整的示例代码,展示了如何使用flutter_shieldfraud_adv插件。

import 'package:flutter/material.dart';
import 'package:flutter_shieldfraud_adv/plugin_shieldfraud.dart';
import 'package:flutter_shieldfraud_adv/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: "SHIELD_SITE_ID",
        key: "SHIELD_SECRET_KEY",
        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_adv的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


flutter_shieldfraud_adv 是一个用于 Flutter 应用的防欺诈验证插件,主要用于检测和防止欺诈行为,保护应用免受恶意用户的攻击。它通过收集设备信息、用户行为数据等,生成一个唯一的设备指纹,并评估设备的风险等级,从而帮助开发者识别潜在的欺诈行为。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  flutter_shieldfraud_adv: ^1.0.0  # 请使用最新版本

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

初始化插件

在使用插件之前,你需要在应用的启动阶段初始化插件。通常可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 ShieldFraud
  await FlutterShieldFraudAdv.init(
    siteId: 'YOUR_SITE_ID',  // 替换为你的 Site ID
    secretKey: 'YOUR_SECRET_KEY',  // 替换为你的 Secret Key
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter ShieldFraud Demo',
      home: HomeScreen(),
    );
  }
}

获取设备指纹

设备指纹是 flutter_shieldfraud_adv 生成的一个唯一标识符,用于识别设备。你可以通过以下方式获取设备指纹:

String? deviceFingerprint = await FlutterShieldFraudAdv.getDeviceFingerprint();
print('Device Fingerprint: $deviceFingerprint');

获取会话ID

会话ID是 flutter_shieldfraud_adv 为每个会话生成的唯一标识符。你可以通过以下方式获取会话ID:

String? sessionId = await FlutterShieldFraudAdv.getSessionId();
print('Session ID: $sessionId');

获取设备风险评分

flutter_shieldfraud_adv 会为设备生成一个风险评分,用于评估设备的潜在风险。你可以通过以下方式获取风险评分:

double? riskScore = await FlutterShieldFraudAdv.getRiskScore();
print('Risk Score: $riskScore');

处理回调

你可以设置回调来监听设备指纹和会话ID的变化:

FlutterShieldFraudAdv.onDeviceFingerprintChanged((String? fingerprint) {
  print('Device Fingerprint Changed: $fingerprint');
});

FlutterShieldFraudAdv.onSessionIdChanged((String? sessionId) {
  print('Session ID Changed: $sessionId');
});

发送自定义事件

你还可以发送自定义事件,以便 flutter_shieldfraud_adv 能够更好地分析用户行为:

await FlutterShieldFraudAdv.sendCustomEvent(
  eventName: 'custom_event_name',
  eventData: {'key1': 'value1', 'key2': 'value2'},
);

处理错误

在使用插件时,可能会遇到一些错误。你可以通过 try-catch 块来捕获并处理这些错误:

try {
  String? deviceFingerprint = await FlutterShieldFraudAdv.getDeviceFingerprint();
  print('Device Fingerprint: $deviceFingerprint');
} catch (e) {
  print('Error: $e');
}
回到顶部