Flutter反欺诈验证插件ironchip_lbfraud的使用

Flutter反欺诈验证插件ironchip_lbfraud的使用

我们的位置欺诈检测系统通过分析环境信号并检测钓鱼、SIM卡交换或合成身份等欺诈行为来确保位置不可伪造。

支持版本

平台 支持版本
iOS 13.0.0+
Android 5.0.0+

开始使用

在您的包的pubspec.yaml文件中添加以下依赖项:

dependencies:
  ironchip_lbfraud: ^2.0.16

Android

为了在Android上使用欺诈检测,建议添加一些权限。虽然不添加这些权限插件仍然可以工作,但准确性会降低。我们建议在应用中添加这些权限以获得最佳效果:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<uses-permission android:name="android.permission.INTERNET" />

记住,用户必须接受这些权限才能生效。

iOS

要使用Ironchip LBFraud,您需要在应用程序的目标中添加一个功能。转到签名和能力,并添加访问Wi-Fi信息的功能。

要在iOS中使用它,您还需要在Info.plist中添加以下权限:

Privacy - Location Always and When In Use Usage Description, 并插入描述作为字符串
Privacy - Location When In Use Usage Description, 并插入描述作为字符串
Privacy - Location Always Usage Description, 并插入描述作为字符串
LSApplicationQueriesSchemes, 并插入描述(此权限用于检查设备是否越狱)

使用方法

然后只需导入该包:

import 'package:ironchip_lbfraud/ironchip_lbfraud.dart';

为了发送交易,您必须首先初始化SDK并提供有效的API密钥:

// 替换APIKEY为生成的API密钥。
// 默认情况下,我们的SDK目标于生产环境。
// 如果您希望针对不同的环境:
// LBFraudSDK fraud = new LbfraudFlutterPlugin.initFraudSDK("APIKEY", env: Environment.testing);
await _lbfraudPlugin.initFraudSDK(apiKey);

一旦服务初始化完成,您可以执行交易:

try {
  // TransactionID (必需且唯一): 交易标识符,用于请求欺诈结果
  // UserID (必需): 用户标识符
  // extraData (可选): 用于分析的额外信息
  // 您可以在不使用await的情况下省略,如果不需要检查操作的结果
  var result = await _lbfraudPlugin.sendTransaction(transactionID, userID, {});

  _showResult = result!;
  _resultError = false;
} catch (e) {
  _showResult = e.toString();
  _resultError = true;
}

尽管sendTransaction是异步的,但如果不想检查操作的实际结果,则不必使用await。此外,如果您在执行交易时想使用特定代理,可以使用以下方式配置代理:

try {
  var result = await _lbfraudPlugin.setProxy(host, port);
} catch (e) {
}

示例代码

以下是完整的示例代码:

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'dart:async';
import 'dart:math';

import 'package:ironchip_lbfraud/ironchip_lbfraud.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> {
  final _lbfraudPlugin = IronchipLbfraud();
  String apiKey = "APIKEY"; // 替换APIKEY为生成的API密钥
  bool _isLbfraudInitialized = false;

  Environment selectedEnv = Environment.production;

  String userID = "john.doe@gmail.com"; // 用户标识符
  String _showResult = "";
  bool _resultError = false;

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

  Future _determinePosition() async {
    bool serviceEnabled;
    LocationPermission permission;

    // 测试位置服务是否启用。
    serviceEnabled = await Geolocator.isLocationServiceEnabled();
    if (!serviceEnabled) {
      // 位置服务未启用,继续访问位置并请求用户启用位置服务。
      return Future.error('Location services are disabled.');
    }

    permission = await Geolocator.checkPermission();
    if (permission == LocationPermission.denied) {
      permission = await Geolocator.requestPermission();
      if (permission == LocationPermission.denied) {
        // 权限被拒绝,下次可以再次请求权限(这是Android的shouldShowRequestPermissionRationale返回true的情况。根据Android指南,您的应用现在应该显示解释性UI)。
        return Future.error('Location permissions are denied');
      }
    }

    if (permission == LocationPermission.deniedForever) {
      // 权限被永久拒绝,适当地处理。
      return Future.error(
          'Location permissions are permanently denied, we cannot request permissions.');
    }

    // 当我们到达这里时,权限已授予,我们可以继续访问设备的位置。
    var pos = await Geolocator.getCurrentPosition();
    if (kDebugMode) {
      print("lat: ${pos.latitude}, long: ${pos.longitude}");
    }
  }

  // LBFraud方法是异步的,所以我们初始化在一个异步方法中。
  Future<void> initLBFraudState() async {
    try {
      // 替换APIKEY为生成的API密钥。
      // 默认情况下,我们的SDK目标于生产环境。
      // 如果您希望针对不同的环境:
      // LBFraudSDK fraud = new LbfraudFlutterPlugin.initFraudSDK("APIKEY", env: Environment.testing);
      await _lbfraudPlugin.initFraudSDK(apiKey, env: selectedEnv);
      // 如果您的设备配置了代理,将配置设置到插件:
      // await _lbfraudPlugin.setProxy("xxx.xxx.xxx.xxx", 8080);
      _isLbfraudInitialized = true;
    } catch (e) {
      _isLbfraudInitialized = false;
    }

    setState(() {
      _isLbfraudInitialized = _isLbfraudInitialized;
    });
  }

  String generateRandomTransactionID(int length) {
    const chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
    Random rnd = Random();

    return String.fromCharCodes(Iterable.generate(
        length, (_) => chars.codeUnitAt(rnd.nextInt(chars.length))));
  }

  Future<void> sendTransaction() async {
    try {
      // TransactionID (必需且唯一): 交易标识符,用于请求欺诈结果
      // UserID (必需): 用户标识符
      // extraData (可选): 用于分析的额外信息
      // 您可以在不使用await的情况下省略,如果不需要检查操作的结果
      var result = await _lbfraudPlugin.sendTransaction(
          generateRandomTransactionID(10), userID, {});

      _showResult = result!;
      _resultError = false;
    } catch (e) {
      _showResult = e.toString();
      _resultError = true;
    }

    setState(() {
      _resultError = _resultError;
      _showResult = _showResult;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Ironchip LBFraud 示例应用'),
          backgroundColor: const Color(0xFF005255),
        ),
        body: Center(
          child: SingleChildScrollView(
            child: Container(
              margin: const EdgeInsets.all(40.0),
              child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    ElevatedButton(
                      onPressed: _determinePosition,
                      style: ElevatedButton.styleFrom(
                        backgroundColor: const Color(
                            0xFF95C11F), // 设置按钮颜色为 #95C11F
                      ),
                      child: const Text('请求位置权限'),
                    ),
                    const SizedBox(height: 20),
                    TextField(
                      onChanged: (value) {
                        apiKey = value;
                      },
                      decoration: const InputDecoration(labelText: "API 密钥"),
                    ),
                    const SizedBox(height: 20),
                    DropdownButtonExample(
                      onChange: (Environment env) {
                        selectedEnv = env;
                      },
                    ),
                    const SizedBox(height: 20),
                    Text(
                      _isLbfraudInitialized
                          ? "LBFraud 已初始化"
                          : "LBFraud 未初始化",
                      style: TextStyle(
                        color: _isLbfraudInitialized
                            ? const Color(0xFF95C11F)
                            : const Color(0xFFF44336),
                      ),
                    ),
                    const SizedBox(height: 20),
                    ElevatedButton(
                      onPressed: initLBFraudState,
                      style: ElevatedButton.styleFrom(
                        backgroundColor: const Color(
                            0xFF95C11F), // 设置按钮颜色为 #95C11F
                      ),
                      child: const Text('初始化 LBFraud'),
                    ),
                    TextField(
                      onChanged: (value) {
                        userID = value;
                      },
                      decoration: const InputDecoration(labelText: "用户 ID"),
                    ),
                    const SizedBox(height: 20),
                    ElevatedButton(
                      onPressed: _isLbfraudInitialized ? sendTransaction : null,
                      style: ElevatedButton.styleFrom(
                        backgroundColor: const Color(
                            0xFF95C11F), // 设置按钮颜色为 #95C11F
                      ),
                      child: const Text('发送交易'),
                    ),
                    const SizedBox(height: 20),
                    Text(
                      _showResult,
                      style: TextStyle(
                        color: _resultError
                            ? const Color(0xFFF44336)
                            : Colors.black,
                      ),
                    ),
                  ]),
            ),
          ),
        ),
      ),
    );
  }
}

const List<String> list = ['Production', 'Testing', 'Development'];

class DropdownButtonExample extends StatefulWidget {
  const DropdownButtonExample({super.key, this.onChange});
  final void Function(Environment)? onChange;

  [@override](/user/override)
  State<DropdownButtonExample> createState() => _DropdownButtonExampleState();
}

class _DropdownButtonExampleState extends State<DropdownButtonExample> {
  String dropdownValue = list.first;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return DropdownButton<String>(
      value: dropdownValue,
      icon: const Icon(Icons.arrow_downward),
      elevation: 16,
      style: const TextStyle(color: Color(0xFF95C11F)),
      underline: Container(
        height: 2,
        color: const Color(0xFF95C11F),
      ),
      onChanged: (String? value) {
        // 当用户选择一个项目时调用。
        if (widget.onChange != null) {
          switch (value) {
            case 'Production':
              widget.onChange!(Environment.production);
              break;
            case 'Testing':
              widget.onChange!(Environment.testing);
              break;
            case 'Development':
              widget.onChange!(Environment.development);
              break;
          }
        }

        setState(() {
          dropdownValue = value!;
        });
      },
      items: list.map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(
          value: value,
          child: Text(value),
        );
      }).toList(),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中集成和使用ironchip_lbfraud插件进行反欺诈验证的代码示例。这个插件通常用于在应用中实现设备指纹、风险评估等功能,以防止欺诈行为。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  ironchip_lbfraud: ^最新版本号  # 请替换为实际可用的最新版本号

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

2. 导入插件

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

import 'package:ironchip_lbfraud/ironchip_lbfraud.dart';

3. 初始化插件

在应用的启动阶段(比如在main函数中),初始化ironchip_lbfraud插件:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await IronchipLbfraud.instance.init("你的AppKey", "你的Channel");
  runApp(MyApp());
}

请确保将"你的AppKey""你的Channel"替换为你从Ironchip平台获取的实际App Key和Channel信息。

4. 使用插件进行反欺诈验证

你可以在需要的地方调用插件提供的API进行反欺诈验证。以下是一个示例,展示了如何获取设备指纹并进行风险评估:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await IronchipLbfraud.instance.init("你的AppKey", "你的Channel");
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Ironchip LBFraud Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                // 获取设备指纹
                String deviceFingerprint = await IronchipLbfraud.instance.getDeviceFingerprint();
                print("Device Fingerprint: $deviceFingerprint");

                // 进行风险评估(假设有风险评估的API)
                // 注意:这里的API名称是假设的,请根据实际插件提供的API进行调整
                Map<String, dynamic> riskResult = await IronchipLbfraud.instance.riskAssessment();
                print("Risk Assessment Result: $riskResult");

                // 显示结果
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                    content: Text('Device Fingerprint and Risk Assessment Completed'),
                  ),
                );
              } catch (e) {
                print("Error: $e");
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                    content: Text('Error during Fingerprint or Risk Assessment'),
                    backgroundColor: Colors.red,
                  ),
                );
              }
            },
            child: Text('Get Device Fingerprint and Risk Assessment'),
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 实际API:上面的riskAssessment方法是一个假设的API,请查阅ironchip_lbfraud插件的官方文档,了解实际可用的风险评估方法及其参数。
  2. 错误处理:在实际应用中,应添加更详细的错误处理逻辑,以确保应用的健壮性。
  3. 隐私合规:在收集和使用设备信息时,务必遵守相关的隐私政策和法律法规。

通过上述步骤,你应该能够在Flutter应用中集成并使用ironchip_lbfraud插件进行反欺诈验证。如果有任何特定需求或问题,建议查阅插件的官方文档或联系插件的开发者获取支持。

回到顶部