Flutter身份验证插件idcheckio的使用

Flutter身份验证插件idcheckio的使用

在本教程中,我们将介绍如何在Flutter应用中使用idcheckio插件。此插件允许用户进行文档扫描和身份验证。

平台特定配置

iOS

  1. 在项目文件夹中,进入你的iOS目录并打开Podfile:
# 更改文件顶部的最低版本至至少为'12.0'
platform :ios, '12.0'

# 添加以下行到目标部分上方
source 'https://github.com/CocoaPods/Specs.git'
source 'https://git-externe.rennes.ariadnext.com/idcheckio/axt-podspecs.git'
  1. 使用以下命令获取SDK:
pod install --repo-update

注意:你需要在$HOME文件夹下设置一个.netrc文件,并用我们的凭证填充它。更多详细信息,请查阅官方文档。

  1. 打开*.plist文件并添加以下条目:
"Privacy - Camera Usage Description" : "Camera is being used to scan documents"

Android

  1. 打开你的构建文件android/app/build.gradle,在android块中添加以下行:
packagingOptions {
    pickFirst 'META-INF/NOTICE'
    pickFirst 'META-INF/LICENSE'
    pickFirst 'META-INF/license.txt'
    pickFirst 'META-INF/notice.txt'
    pickFirst 'META-INF/DEPENDENCIES'
}
  1. 若要访问我们外部的nexus以检索最新版本的IDCheck.io SDK,你必须更新plugin项目的gradle文件PATH_TO_PLUGIN_FOLDER/android/build.gradle,并将其中的$YOUR_USERNAME$YOUR_PASSWORD替换为我们支持团队提供的凭证。

使用方法

导入插件

首先,在你的Dart文件中导入idcheckio插件:

import 'package:idcheckio/idcheckio.dart';

激活SDK

在捕获任何文档之前,你需要激活许可证。你可以使用activate()方法,传入激活令牌:

Future<void> activateSDK() async {
  bool activationStatus = false;
  try {
    await _idcheckioPlugin.activate(
        idToken: _activationToken,
        extractData: true);
    activationStatus = true;
  } on PlatformException catch (e) {
    activationStatus = false;
    ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message));
    debugPrint("An error happened during the activation : ${errorMsg.cause} - ${errorMsg.details} - ${errorMsg.message}");
  }
  if (!mounted) return;
  setState(() {
    _sdkActivated = activationStatus;
  });
}

捕获文档

要开始捕获文档,可以使用start()方法。这将返回一个IdcheckioResult对象:

Future<void> capture() async{
  IDCheckioResult? result;
  IDCheckioParams paramsLiveness = IDCheckioParams(
      IDCheckioParamsBuilder()
        ..docType = DocumentType.LIVENESS
        ..orientation = IDCheckioOrientation.PORTRAIT
        ..confirmAbort = true
  );
  IDCheckTheme theme = IDCheckTheme(primaryColor: "purple");
  try {
    result = await _idcheckioPlugin.start(paramsLiveness, _captureResult?.onlineContext, theme);
    debugPrint('ID Capture Successful : ${result!.toJson()}', wrapWidth: 500);
  } on PlatformException catch(e) {
    ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message));
    debugPrint("An error happened during the capture : ${errorMsg.cause} - ${errorMsg.message} - ${errorMsg.subCause}");
  }
  if (!mounted) return;
  setState(() {
    _captureResult = result;
  });
}

开始引导会话

若要开始一个引导会话,首先需要根据IPS文档创建一个新的IPS会话,然后调用startIps方法,传入获取到的令牌。成功时结果为空,否则发送错误。如果想检索数据,可以在IPS上检查捕获的结果。

Future<void> startOnboarding() async {
  IDCheckTheme theme = IDCheckTheme(primaryColor: "purple");
  try {
    await IDCheckio.startOnboarding(ipsController.text, theme);
  } on PlatformException catch (e) {
    ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message));
    debugPrint("An error happened during the ips session : ${errorMsg.cause} - ${errorMsg.message} - ${errorMsg.subCause}");
  }
}

主题定制

如果你想更改SDK的颜色以匹配你的主题,可以通过提供颜色名称(对于Android是资源名称,对于iOS是资产名称)来创建一个IDCheckTheme()对象:

IDCheckTheme myTheme = IDCheckTheme(primaryColor: "blue", borderColor: "white", foregroundColor: "white", backgroundColor: "blue");

现在你已经准备好了!🎉 若要了解更多关于这些方法及其参数的信息,请参阅官方的IDCheck.io Mobile SDK文档。


完整示例

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

import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:idcheckio/idcheckio.dart';
import 'package:idcheckio/idcheckio_api.dart';
import 'package:idcheckio_example/theme.dart';
import 'params.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 _activationToken = "4ISdBd6Ha1x/oyw6Cbss7KoZy9cQKKmAorBMXrtrTv12ooy/wJ5TxSWaJF7v2oGzFsSlZfss6ObaHH2T63AT2dqAx+vW1EHk22RkKtn+bAX0o3Pn6tYkNkBR5/rbrHqXAaHKyexzaTGeml+208D5Bf33msvg4LkvJh8TS1YxYA5RoBI=";
  final _idcheckioPlugin = IDCheckio();
  bool _sdkActivated = false;
  IDCheckioResult? _captureResult;
  String _onboardingFolderUid = "";
  late Function() _onboardingListener;
  TextEditingController onboardingController = new TextEditingController();
  late ParamsListItem _selectedItem;
  late SdkColor _selectedTheme;
  late List<DropdownMenuItem<ParamsListItem>> _dropdownMenuItems;
  late List<DropdownMenuItem<SdkColor>> _dropdownThemeItems;
  List<SdkColor> _dropdownTheme = [
    SdkColor.DEFAULT,
    SdkColor.BLUE,
    SdkColor.PURPLE,
    SdkColor.DARK_GOLD
  ];
  List<ParamsListItem> _dropdownItems = [
    ParamsListItem("ID", paramsID),
    ParamsListItem("Liveness", paramsLiveness),
    ParamsListItem("Start Onboarding", null)..isOnboarding = true,
    ParamsListItem("French health card", paramsFrenchHealthCard),
    ParamsListItem("Selfie", paramsSelfie),
    ParamsListItem("Address proof", paramsAddressProof),
    ParamsListItem("Vehicle registration", paramsVehicleRegistration),
    ParamsListItem("Iban", paramsIban),
    ParamsListItem("Attachment", paramsAttachment)
  ];

  void listener() {
    setState(() {
      _onboardingFolderUid = onboardingController.text;
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    _dropdownMenuItems = buildDropDownMenuItems(_dropdownItems);
    _selectedItem = _dropdownMenuItems[0].value!;
    _dropdownThemeItems = buildDropDownTheme(_dropdownTheme);
    _selectedTheme = _dropdownThemeItems[0].value!;
    _onboardingListener = listener;
    onboardingController.addListener(_onboardingListener);
  }

  void dispose() {
    onboardingController.removeListener(_onboardingListener);
    super.dispose();
  }

  Future<void> activateSDK() async {
    bool activationStatus = false;
    try {
      await _idcheckioPlugin.activate(
          idToken: _activationToken,
          extractData: true);
      activationStatus = true;
    } on PlatformException catch (e) {
      activationStatus = false;
      ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message!));
      debugPrint("An error happened during the activation : ${errorMsg.cause} - ${errorMsg.details} - ${errorMsg.message}");
    }
    if (!mounted) return;
    setState(() {
      _sdkActivated = activationStatus;
    });
  }

  Future<void> capture() async {
    IDCheckioResult? result;
    IDCheckioParamsBuilder builder = _selectedItem.params!;
    IDCheckTheme theme = _selectedTheme.theme;
    IDCheckioParams params = IDCheckioParams(builder);
    try {
      // Capture mode
      result = await _idcheckioPlugin.start(params, _captureResult?.onlineContext, theme);
      debugPrint('ID Capture Successful : ${result.toJson()}', wrapWidth: 500);
    } on PlatformException catch (e) {
      ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message!));
      debugPrint("An error happened during the capture : ${errorMsg.cause} - ${errorMsg.message} - ${errorMsg.subCause}");
    }
    if (!mounted) return;
    setState(() {
      _captureResult = result;
    });
  }

  Future<void> startOnboarding() async {
    try {
      IDCheckTheme theme = _selectedTheme.theme;
      await _idcheckioPlugin.startOnboarding(onboardingController.text, theme);
    } on PlatformException catch (e) {
      ErrorMsg errorMsg = ErrorMsg.fromJson(jsonDecode(e.message!));
      debugPrint("An error happened during the onboarding session : ${errorMsg.cause} - ${errorMsg.message} - ${errorMsg.subCause}");
    }
  }

  List<DropdownMenuItem<ParamsListItem>> buildDropDownMenuItems(List listItems) {
    List<DropdownMenuItem<ParamsListItem>> items = [];
    for (ParamsListItem listItem in listItems as Iterable<ParamsListItem>) {
      items.add(
        DropdownMenuItem(
          child: Text(listItem.name),
          value: listItem,
        ),
      );
    }
    return items;
  }

  List<DropdownMenuItem<SdkColor>> buildDropDownTheme(List themes) {
    List<DropdownMenuItem<SdkColor>> items = [];
    for (SdkColor theme in themes as Iterable<SdkColor>) {
      items.add(
        DropdownMenuItem(
          child: Text(theme.name),
          value: theme,
        ),
      );
    }
    return items;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('IDCheck.io SDK Flutter Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Text(
                  getTitle(),
                  textAlign: TextAlign.center,
                  style: TextStyle(fontSize: 24.0)
              ),
              SizedBox(height: 60),
              DropdownButton(
                items: _dropdownMenuItems,
                value: _selectedItem,
                onChanged: (dynamic value) {
                  setState(() {
                    _selectedItem = value;
                  });
                },
              ),
              DropdownButton(
                items: _dropdownThemeItems,
                value: _selectedTheme,
                onChanged: (dynamic value) {
                  setState(() {
                    _selectedTheme = value;
                  });
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                child: new Text(_sdkActivated ? "SDK已经激活" : "激活SDK"),
                onPressed: _sdkActivated ? null : activateSDK,
              ),
              Column(
                children: buildChildren(),
              ),
              SizedBox(height: 40),
              Text(
                  _captureResult != null
                      ? _captureResult!.document != null && _captureResult!.document is IdentityDocument
                      ? "你好 ${(_captureResult!.document as IdentityDocument).fields[IdentityDocumentField.firstNames]!.value!.split(" ").first}"
                      " "
                      "${(_captureResult!.document as IdentityDocument).fields[IdentityDocumentField.lastNames]!.value}! 🤓"
                      : "捕获成功 👍"
                      : "请先扫描身份证",
                  style: TextStyle(fontSize: 20.0)),
            ],
          ),
        ),
      ),
    );
  }

  String getTitle() {
    String title;
    if(_sdkActivated && _selectedItem.isOnboarding && _onboardingFolderUid.isEmpty) {
      title = "你需要提供一个文件夹名以开始引导会话。";
    } else if(_sdkActivated ) {
      title = "SDK已激活! 🎉";
    } else {
      title = "SDK未激活";
    }
    return title;
  }

  List<Widget> buildChildren() {
    List<Widget> builder = [];
    if(_selectedItem.isOnboarding){
      builder.add(
          Padding(
            child: TextField(
              controller: onboardingController,
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                hintText: '请输入你的引导文件夹uid。',
              ),
            ),
            padding: EdgeInsets.only(left: 32.0, right: 32.0),
          )
      );
    }
    String buttonText;
    Function()? onClick;
    if(_sdkActivated && _selectedItem.isOnboarding) {
      buttonText = "开始引导会话";
      onClick = _onboardingFolderUid.isEmpty ? null : startOnboarding;
    } else if(_sdkActivated) {
      buttonText = "捕获文档";
      onClick = capture;
    } else {
      buttonText = "SDK未激活";
      onClick = null;
    }
    builder.add(
        ElevatedButton(
          child: new Text(buttonText),
          onPressed: onClick,
        )
    );
    return builder;
  }
}

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

1 回复

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


idcheckio 是一个用于身份验证的 Flutter 插件,它可以帮助开发者集成身份验证功能,例如身份证、护照、驾驶证等证件的验证。以下是如何使用 idcheckio 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  idcheckio: ^最新版本

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

2. 初始化插件

在你的 Dart 文件中,导入 idcheckio 插件并初始化它。

import 'package:idcheckio/idcheckio.dart';

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

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  void initState() {
    super.initState();
    // 初始化 idcheckio
    IdCheckio.initialize(
      apiKey: 'YOUR_API_KEY',
      apiSecret: 'YOUR_API_SECRET',
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('idcheckio Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 启动身份验证流程
            var result = await IdCheckio.startVerification();
            if (result != null) {
              print('Verification Result: $result');
            } else {
              print('Verification failed or was canceled');
            }
          },
          child: Text('Start Verification'),
        ),
      ),
    );
  }
}

3. 启动身份验证

onPressed 事件中,调用 IdCheckio.startVerification() 来启动身份验证流程。该方法会返回一个包含验证结果的对象。

4. 处理验证结果

根据 IdCheckio.startVerification() 返回的结果,你可以处理验证成功或失败的情况。

var result = await IdCheckio.startVerification();
if (result != null) {
  print('Verification Result: $result');
  // 处理验证成功的逻辑
} else {
  print('Verification failed or was canceled');
  // 处理验证失败或取消的逻辑
}
回到顶部