Flutter设备指纹与欺诈检测插件incognia_flutter的使用

Flutter设备指纹与欺诈检测插件incognia_flutter的使用

Incognia for Flutter

Incognia的Flutter插件允许你在Flutter应用中集成其移动SDK。该SDK通过捕获设备信息、位置相关信号(如GPS、Wi-Fi)以及用户会话来帮助区分攻击者和合法用户。为了从API获取风险评估,首先需要安装并配置移动SDK。

安装

要安装Incognia Flutter插件,你需要在pubspec.yaml文件中添加以下依赖:

dependencies:
  incognia_flutter: ^1.1.1

配置

配置需要设置特定平台的配置。

Android
更新Android清单文件

在你的AndroidManifest.xml文件中的<manifest>标签内添加以下<uses-permission>标签:

<manifest>
  <!-- 用于网络访问的权限 -->
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  <!-- 用于位置服务的权限 -->
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>

可选的权限可以根据需求进行配置。更多关于清单权限的信息可以在我们的flutter文档中找到。

添加Incognia配置文件到项目

Incognia SDK的初始化依赖于incognia.xml文件的存在,该文件位于Android项目的main/res/values目录下。要访问此配置文件,可以前往Incognia仪表板下载它。

配置属性的含义可以在我们的flutter文档中找到。

iOS
功能设置

Incognia SDK使用访问WiFi信息的功能来提高访问检测和位置准确性。要启用此功能,在XCode的Runner项目的功能部分中,开启访问WiFi信息的功能(仅适用于XCode 10及以上版本和iOS 12及以上版本)。

添加Incognia配置文件到项目

Incognia SDK的初始化依赖于IncogniaOptions.plist文件的存在。要访问此配置文件,可以前往Incognia仪表板下载它。确保你选择了Flutter Runner和其他相关目标。

初始化SDK

建议在应用程序生命周期的最早阶段初始化SDK。可以通过覆盖StatefulWidget状态的initState方法来实现这一点,如下所示:

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 _incogniaFlutterPlugin = IncogniaFlutter();

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

示例代码

下面是一个完整的示例代码,展示了如何在Flutter应用中使用Incognia Flutter插件:

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

import 'package:incognia_flutter/custom_event.dart';
import 'package:incognia_flutter/incognia_flutter.dart';
import 'package:incognia_flutter/incognia_options.dart';

void main() {
  runApp(const MaterialApp(home: MyApp()));
}

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

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

class _MyAppState extends State<MyApp> {
  late TextEditingController _textEditingController;
  final _incogniaFlutterPlugin = IncogniaFlutter();
  String _sdkInitCalled = "Not called yet";

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

    _incogniaFlutterPlugin.initSdk();

    // 如果需要初始化SDK时传递选项,取消注释以下行:
    // _incogniaFlutterPlugin.initSdkWithOptions(
    //   IncogniaOptions(
    //       androidOptions:
    //           AndroidOptions(appId: "YOUR_ANDROID_APP_ID", logEnabled: true),
    //       iOSOptions: IOSOptions(appId: "YOUR_IOS_APP_ID", logEnabled: true)),
    // );

    _sdkInitCalled = "Init Called";
    _textEditingController = TextEditingController();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(children: [
            Text('SDK初始化状态: $_sdkInitCalled\n'),
            TextField(
              controller: _textEditingController,
              decoration: const InputDecoration(
                border: OutlineInputBorder(),
                labelText: '账户ID',
              ),
              onSubmitted: (String value) {
                _incogniaFlutterPlugin.setAccountId(value);
              },
            ),
            TextButton(
              onPressed: () {
                _incogniaFlutterPlugin
                    .setAccountId(_textEditingController.text);
              },
              child: const Text('设置账户ID'),
            ),
            TextButton(
              onPressed: () {
                _incogniaFlutterPlugin.clearAccountId();
              },
              child: const Text('清除账户ID'),
            ),
            TextButton(
              onPressed: () {
                var customEvent = CustomEvent(tag: 'custom_event', properties: {
                  'property1': 'value1',
                  'property2': 0,
                  'property3': 2.8,
                  'property4': true,
                });
                _incogniaFlutterPlugin.sendCustomEvent(customEvent);
              },
              child: const Text('发送自定义事件'),
            ),
            TextButton(
              onPressed: () async {
                var token = await _incogniaFlutterPlugin.generateRequestToken();
                if (context.mounted) {
                  showDialog(
                    context: context,
                    builder: (BuildContext context) {
                      return AlertDialog(
                        title: const Text('请求令牌'),
                        content: Text(token ?? 'null'),
                        actions: <Widget>[
                          TextButton(
                            onPressed: () async {
                              await Clipboard.setData(
                                  ClipboardData(text: token ?? 'null'));
                            },
                            child: const Text('复制到剪贴板'),
                          ),
                          TextButton(
                            onPressed: () {
                              Navigator.of(context).pop();
                            },
                            child: const Text('关闭'),
                          ),
                        ],
                      );
                    },
                  );
                }
              },
              child: const Text('生成请求令牌'),
            ),
          ]),
        ),
      ),
    );
  }
}

更多关于Flutter设备指纹与欺诈检测插件incognia_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用incognia_flutter插件进行设备指纹与欺诈检测的示例代码。incognia_flutter插件允许你集成Incognia的服务来增强应用的安全性,通过设备指纹技术识别设备并检测欺诈行为。

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

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

然后,运行flutter pub get来获取依赖。

接下来,你需要在你的Flutter应用中初始化Incognia并处理设备指纹和欺诈检测。以下是一个简单的示例代码:

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

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

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

class _MyAppState extends State<MyApp> {
  String deviceFingerprint = '';
  String fraudRiskScore = '';

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

  Future<void> _initializeIncognia() async {
    // 替换为你的Incognia API密钥
    String apiKey = '你的Incognia API密钥';

    try {
      // 初始化Incognia
      await IncogniaFlutter.initialize(apiKey: apiKey);

      // 获取设备指纹
      String fingerprint = await IncogniaFlutter.getDeviceFingerprint();
      setState(() {
        deviceFingerprint = fingerprint;
      });

      // 进行欺诈检测(假设有一个用户会话ID)
      String sessionId = '用户会话ID'; // 替换为实际的用户会话ID
      FraudRiskResult result = await IncogniaFlutter.evaluateFraudRisk(sessionId: sessionId);
      setState(() {
        fraudRiskScore = result.riskScore.toString();
      });
    } catch (e) {
      print('Error initializing Incognia: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Incognia Flutter Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text('Device Fingerprint:'),
              Text(deviceFingerprint, style: TextStyle(fontSize: 16)),
              SizedBox(height: 16),
              Text('Fraud Risk Score:'),
              Text(fraudRiskScore, style: TextStyle(fontSize: 16)),
            ],
          ),
        ),
      ),
    );
  }
}

class FraudRiskResult {
  final double riskScore;

  FraudRiskResult({required this.riskScore});

  factory FraudRiskResult.fromJson(Map<String, dynamic> json) {
    return FraudRiskResult(
      riskScore: json['riskScore'].toDouble(),
    );
  }
}

注意事项

  1. API密钥:在实际部署时,请确保你的API密钥是安全的,不要在客户端代码中硬编码。可以考虑使用安全的存储方式或者从服务器获取。
  2. 用户会话IDsessionId应该是唯一的,代表当前用户的会话。你需要根据你的应用逻辑来生成或获取这个ID。
  3. 错误处理:在实际应用中,应该添加更多的错误处理逻辑,比如网络错误、API响应错误等。
  4. 数据保护:设备指纹和欺诈检测结果可能包含敏感信息,确保这些信息的使用和存储符合相关法律法规和隐私政策。

这个示例代码展示了如何在Flutter应用中集成incognia_flutter插件,并获取设备指纹和欺诈风险评分。根据你的具体需求,你可能需要进一步定制和扩展这个示例。

回到顶部