Flutter SEON SDK集成插件seon_sdk_flutter_plugin的使用

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

Flutter SEON SDK集成插件seon_sdk_flutter_plugin的使用

简介

seon_sdk_flutter_plugin 是一个官方的Flutter插件,用于将SEON的高级反欺诈和设备指纹功能集成到您的Flutter应用程序中。该插件为Android和iOS平台提供了统一的接口,以便访问SEON SDK的功能。

平台特定要求

Android
  • 最低版本:Android 5.0(API级别21)
  • 必要权限
    • INTERNET 权限
  • 可选权限
    • READ_PHONE_STATE 权限(仅适用于API 28以下)用于获取is_on_calldevice_cellular_id
    • ACCESS_WIFI_STATE 权限(仅适用于API 27以下)用于获取wifi_ssid
    • ACCESS_NETWORK_STATE 权限用于获取WiFi配置和蜂窝数据配置
    • ACCESS_FINE_LOCATION(从API 29开始)和ACCESS_COARSE_LOCATION(从API 27开始)权限用于获取wifi_mac_addresswifi_ssiddevice_location
    • ACCESS_BACKGROUND_LOCATION(从API 29开始)权限用于在应用后台时获取位置更新
    • com.google.android.providers.gsf.permission.READ_GSERVICES 权限用于获取gsf_id
iOS
  • 最低版本:iOS 12.0
  • 可选权限
    • 访问WiFi信息权限用于获取wifi_mac_addresswifi_ssid
    • Core Location权限(从iOS 13开始)用于获取device_locationwifi_mac_addresswifi_ssid

使用插件

SEON SDK返回一个加密的base64编码字符串。为了获取设备详细信息的JSON,您需要通过Fraud API请求发送此字符串,并将结果包含在响应中。客户端无法访问或修改payload。

final _seonSdkFlutterPlugin = SeonSdkFlutterPlugin();

try {
    String? fingerprint = await _seonSdkFlutterPlugin.getFingerprint("UNIQUE_SESSION_ID");
    // 将fingerprint设置为Fraud API请求中的session属性
} catch (e) {
    print("Error getting fingerprint: $e");
}

行为监控(可选)

行为监控允许SEON SDK检测设备上的潜在可疑用户行为。SDK在会话期间收集数据,并分析这些数据以识别潜在的欺诈环境和行为。此功能增强了SDK防止欺诈的能力,能够检测各种形式的自动化或可疑活动,例如机器人使用或设备农场。

要启用行为监控,请在您希望检测可疑活动的地方调用startBehaviourMonitoring,并在合适的时候调用stopBehaviourMonitoring来停止监控并获取结果。

final _seonSdkFlutterPlugin = SeonSdkFlutterPlugin();

// 在相关用户旅程之前启动行为监控
try {
    _seonSdkFlutterPlugin.startBehaviourMonitoring();
} catch (e) {
    print('Failed to start behaviour monitoring: $e');
}

/* ---- 相关用户旅程发生在这里 ----
* 注意:行为分析需要时间来收集用户行为信号,
* 因此建议至少运行几秒钟。
*/

// 当您想要收集结果时,调用stopBehaviourMonitoring()并获取指纹
try {
    String? fingerprint = await _seonSdkFlutterPlugin.stopBehaviourMonitoring("UNIQUE_SESSION_ID");
    // 将fingerprint设置为Fraud API请求中的session属性
} catch (e) {
    print("Error getting fingerprint: $e");
}

可能的suspicious_flags

  • "possible_automation":表明可能有自动化工具或脚本控制设备。
  • "possible_device_farm":表明设备可能是设备农场的一部分,用于欺诈活动。
  • "possible_vishing":标记可能的语音钓鱼活动,用户可能被迫提供敏感信息。
  • "possible_ongoing_call"(仅限Android):标记可能正在进行电话通话,这在未授予READ_PHONE_STATE权限的情况下特别有用。

地理位置集成

您可以启用或禁用地理位置功能,并根据需要配置地理位置参数。

// 提示用户授予适当的地理位置权限
// ...

// 设置地理位置属性
final geoConfig = SeonGeolocationConfigBuilder()
    .withGeolocationEnabled(true)
    .withLocationServiceTimeoutMs(3000)
    .withPrefetchEnabled(true)
    .withMaxLocationCacheAgeSec(600)
    .build();

_seonSdkFlutterPlugin.setGeolocationConfig(geoConfig);

// 生成指纹

完整示例Demo

以下是一个完整的示例应用程序,展示了如何使用seon_sdk_flutter_plugin插件来获取设备指纹、启动和停止行为监控以及处理地理位置配置。

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:seon_sdk_flutter_plugin/seon_sdk_flutter_plugin.dart';
import 'package:seon_sdk_flutter_plugin/seon_sdk_geolocation_config_builder.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> {
  String _fingerprint = 'Unknown';
  final _seonSdkFlutterPlugin = SeonSdkFlutterPlugin();

  [@override](/user/override)
  void initState() {
    super.initState();
    try {
      // 配置地理位置
      final geoConfig = SeonGeolocationConfigBuilder()
          .withGeolocationEnabled(false)
          .withLocationServiceTimeoutMs(5000)
          .withPrefetchEnabled(true)
          .withMaxLocationCacheAgeSec(10)
          .build();
      _seonSdkFlutterPlugin.setGeolocationConfig(geoConfig);
    } catch (e) {
      print('$e');
    }
  }

  // 获取设备指纹
  Future<void> getFingerprint() async {
    String fingerprint;
    try {
      fingerprint = await _seonSdkFlutterPlugin
              .getFingerprint("flutter-demo-session-id-1111") ??
          'Error getting fingerprint';
    } catch (e) {
      fingerprint = 'Failed to get fingerprint $e';
    }

    if (!mounted) return;
    print(fingerprint);
    setState(() {
      _fingerprint = fingerprint;
    });
  }

  // 停止行为监控并获取指纹
  Future<void> stopBehaviourMonitoring() async {
    String fingerprint;
    try {
      fingerprint = await _seonSdkFlutterPlugin.stopBehaviourMonitoring(
              "flutter-behaviour-demo-session-id-2222") ??
          'Error getting fingerprint';
    } catch (e) {
      fingerprint = 'Failed to get fingerprint $e';
    }

    if (!mounted) return;
    print(fingerprint);
    setState(() {
      _fingerprint = fingerprint;
    });
  }

  // 启动行为监控
  Future<void> startBehaviourMonitoring() async {
    try {
      _seonSdkFlutterPlugin.startBehaviourMonitoring();
      print('Behaviour started');
    } catch (e) {
      print('Failed to start behaviour monitoring: $e');
      if (mounted) {
        setState(() {
          _fingerprint = 'Failed to start behaviour $e';
        });
      }
    }
  }

  // 复制文本到剪贴板
  Future<void> copyToClipboard(String text) async {
    await Clipboard.setData(ClipboardData(text: text));
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(content: Text('Copied to clipboard')),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Seon SDK Example'),
        ),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Expanded(
                  child: SingleChildScrollView(
                    child: SelectableText(
                      'Fingerprint: $_fingerprint\n',
                      textAlign: TextAlign.center,
                    ),
                  ),
                ),
                ElevatedButton(
                  onPressed: getFingerprint,
                  child: const Text('Get Fingerprint'),
                ),
                ElevatedButton(
                  onPressed: () => copyToClipboard(_fingerprint),
                  child: const Text('Copy to Clipboard'),
                ),
                ElevatedButton(
                  onPressed: startBehaviourMonitoring,
                  child: const Text('Start Behaviour Monitoring'),
                ),
                ElevatedButton(
                  onPressed: stopBehaviourMonitoring,
                  child: const Text('Stop Behaviour Monitoring'),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter SEON SDK集成插件seon_sdk_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter SEON SDK集成插件seon_sdk_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中集成并使用seon_sdk_flutter_plugin进行SEON SDK集成的代码示例。这个示例将展示如何安装插件、初始化SDK以及进行一些基本操作的代码。

1. 安装插件

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

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

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

2. 初始化SDK

在你的Flutter应用的入口文件(通常是main.dart)中,初始化SEON SDK。

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化SEON SDK
  SeonSdkFlutterPlugin.initialize(
    apiKey: '你的SEON API密钥',  // 替换为你的实际API密钥
    onInitialized: (success) {
      if (success) {
        print('SEON SDK initialized successfully.');
      } else {
        print('Failed to initialize SEON SDK.');
      }
    },
  );

  runApp(MyApp());
}

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

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter SEON SDK Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'SEON SDK is initialized!',
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 示例:执行某个SEON SDK的功能,比如跟踪事件
                trackEvent();
              },
              child: Text('Track Event'),
            ),
          ],
        ),
      ),
    );
  }

  void trackEvent() {
    // 示例:跟踪一个自定义事件
    SeonSdkFlutterPlugin.trackEvent(
      eventName: 'custom_event',
      eventProperties: <String, dynamic>{
        'property1': 'value1',
        'property2': 123,
      },
      onSuccess: (result) {
        print('Event tracked successfully: $result');
      },
      onError: (error) {
        print('Failed to track event: $error');
      },
    );
  }
}

3. 运行应用

确保你的Flutter开发环境已经配置好,然后运行你的应用:

flutter run

注意事项

  1. API密钥:确保你已经从SEON平台获取了API密钥,并在代码中正确替换。
  2. 权限:检查你的AndroidManifest.xmlInfo.plist文件,确保已经添加了必要的权限配置(如果需要)。
  3. 依赖版本:始终使用最新的seon_sdk_flutter_plugin版本,以确保获得最新的功能和修复。

这个示例展示了如何集成和使用seon_sdk_flutter_plugin进行基本的SDK初始化和事件跟踪。根据SEON SDK的文档,你可以进一步探索更多高级功能。

回到顶部