Flutter身份验证插件iproov_flutter的使用

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

Flutter身份验证插件iproov_flutter的使用

简介

iProov Biometrics Flutter SDK 将 iProov 的原生 iOS(Swift)和 Android(Java)SDK 包装在一个 Dart 接口中,以便在您的 Flutter iOS 或 Android 应用程序中使用。该 SDK 还提供了一个用 Dart 编写的 API 客户端,用于从 Flutter 应用调用 iProov 的 REST API v2。

要求

  • Dart SDK 2.15 及以上版本
  • Flutter SDK 1.20 及以上版本
  • iOS 13 及以上版本
  • Android API Level 26 (Android 8 Oreo) 及以上版本

安装步骤

添加依赖

pubspec.yaml 文件中添加以下内容:

dependencies:
  iproov_flutter: ^5.0.2

然后运行以下命令进行安装:

flutter pub get

iOS 配置

在 iOS 应用的 Info.plist 文件中添加 NSCameraUsageDescription,例如:

<key>NSCameraUsageDescription</key>
<string>To iProov you in order to verify your identity.</string>

使用示例

获取 Token 并启动 iProov

首先需要获取一个有效的 token,可以通过 API 客户端或后端请求获得。以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:iproov_api_client/iproov_api_client.dart';
import 'package:iproov_flutter/iproov_flutter.dart';

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  bool _scanInProgress = false;

  final _apiClient = const ApiClient(
    baseUrl: 'https://eu.rp.secure.iproov.me/api/v2',
    apiKey: '<YOUR_API_KEY>',
    secret: '<YOUR_SECRET>',
  );

  void _getTokenAndLaunchIProov() async {
    setState(() => _scanInProgress = true);

    String token;
    try {
      token = await _apiClient.getToken(
        assuranceType: AssuranceType.genuinePresenceAssurance,
        claimType: ClaimType.enrol,
        userId: "test@example.com",
      );
    } catch (e) {
      setState(() => _scanInProgress = false);
      showDialog(
        context: context,
        builder: (context) {
          return AlertDialog(
            title: Text('Error'),
            content: Text(e.toString()),
            actions: [
              TextButton(
                child: Text('OK'),
                onPressed: () => Navigator.pop(context),
              )
            ],
          );
        },
      );
      return;
    }

    const options = Options();

    _launchIProov(token, options);
  }

  void _launchIProov(String token, Options options) {
    final stream = IProov.launch(streamingUrl: 'wss://eu.rp.secure.iproov.me/ws', token: token, options: options);

    stream.listen((event) {
      if (event is IProovEventConnecting) {
        print('Connecting...');
      } else if (event is IProovEventConnected) {
        print('Connected');
      } else if (event is IProovEventProcessing) {
        print('Progress: ${event.progress}');
      } else if (event is IProovEventSuccess) {
        print('Success!');
        setState(() => _scanInProgress = false);
      } else if (event is IProovEventCanceled) {
        print('Canceled by ${event.canceler.name}');
        setState(() => _scanInProgress = false);
      } else if (event is IProovEventFailure) {
        print('Failure: ${event.reason}');
        setState(() => _scanInProgress = false);
      } else if (event is IProovEventError) {
        print('Error: ${event.error.title}');
        setState(() => _scanInProgress = false);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('iProov Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _scanInProgress ? null : _getTokenAndLaunchIProov,
          child: Text('Start iProov'),
        ),
      ),
    );
  }
}

UI 事件(可选)

可以监听 iProov UI 生命周期并接收结果:

IProov.uiEvent().listen((uiEvent) {
  if (uiEvent is IProovUIEventNotStarted) {
    print('UI Not Started');
  } else if (uiEvent is IProovUIEventStarted) {
    print('UI Started');
  } else if (uiEvent is IProovUIEventEnded) {
    print('UI Ended');
  }
});

取消 SDK

在某些情况下,您可能希望取消正在进行的 iProov 扫描:

final stream = IProov.launch(streamingUrl: 'wss://eu.rp.secure.iproov.me/ws', token: '<YOUR_TOKEN>');

final subscription = stream.listen((event) { ... });

subscription.cancel();

自定义选项

通过 Options 类可以自定义 iProov 的多种设置,例如:

const options = Options(
  filter: LineDrawingFilter(
    style: LineDrawingFilterStyle.vibrant,
    foregroundColor: Colors.black,
    backgroundColor: Colors.white
  ),
);

错误处理

所有来自原生 SDK 的错误都被映射为 Flutter 异常,例如:

try {
  // Your iProov code here
} on CaptureAlreadyActiveException {
  print('An existing iProov capture is already in progress.');
} on NetworkException catch (e) {
  print('Network error: ${e.message}');
}

API 客户端

API 客户端提供了方便的方法来调用 iProov 的 REST API v2,但不应在生产应用中使用:

final apiClient = const ApiClient(
  baseUrl: 'https://eu.rp.secure.iproov.me/api/v2',
  apiKey: '<YOUR_API_KEY>',
  secret: '<YOUR_SECRET>',
);

final token = await apiClient.getToken(
  assuranceType: AssuranceType.genuinePresenceAssurance,
  claimType: ClaimType.enrol,
  userId: "test@example.com",
);

结论

通过上述步骤,您可以轻松地在 Flutter 应用中集成 iProov 身份验证功能。请确保在实际项目中遵循安全最佳实践,不要将敏感信息嵌入到生产环境中。


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

1 回复

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


当然,以下是如何在Flutter项目中使用iproov_flutter插件进行身份验证的示例代码。请确保你已经按照iproov_flutter插件的官方文档完成了必要的安装和配置步骤。

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

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

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用iproov_flutter插件:

  1. 导入插件

在你的Dart文件中导入iproov_flutter插件:

import 'package:iproov_flutter/iproov_flutter.dart';
  1. 初始化插件

在使用插件之前,你可能需要初始化它。这通常包括设置一些必要的配置参数。在Flutter中,这通常是在State对象的initState方法或其他适当的生命周期方法中完成的。

class _MyHomePageState extends State<MyHomePage> {
  IproovFlutter? _iproov;

  @override
  void initState() {
    super.initState();
    // 初始化iproov_flutter插件
    _iproov = IproovFlutter();
    // 配置插件(如果需要)
    // _iproov!.configure(...);
  }

  @override
  void dispose() {
    _iproov?.dispose();
    super.dispose();
  }

  // 其他方法...
}
  1. 启动身份验证流程

要启动身份验证流程,你可以调用插件提供的相应方法。以下是一个简单的示例,展示了如何启动身份验证并处理结果:

void _startAuthentication() async {
  try {
    // 假设你需要传递一些参数给iproov,比如session ID等
    final Map<String, dynamic> authParams = {
      'sessionId': 'your-session-id', // 替换为你的实际会话ID
      // 其他必要的参数...
    };

    // 启动身份验证流程
    final IproovResult result = await _iproov!.startAuthentication(authParams);

    // 处理结果
    if (result.success) {
      print('身份验证成功');
      // 处理成功逻辑...
    } else {
      print('身份验证失败: ${result.errorMessage}');
      // 处理失败逻辑...
    }
  } catch (e) {
    print('发生错误: $e');
    // 处理异常逻辑...
  }
}
  1. 在UI中触发身份验证

你可以在UI中添加一个按钮或其他控件来触发身份验证流程。例如:

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

class _MyHomePageState extends State<MyHomePage> {
  // ...(之前的代码)

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('iProov Flutter 示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _startAuthentication,
          child: Text('开始身份验证'),
        ),
      ),
    );
  }
}

这个示例展示了如何在Flutter项目中集成和使用iproov_flutter插件进行身份验证。请注意,具体的参数和方法可能会根据iproov_flutter插件的版本和API文档有所不同,因此请务必查阅最新的官方文档以获取准确的信息。

回到顶部