Flutter身份验证插件shuftipro_demo_sdk的使用

Flutter身份验证插件shuftipro_demo_sdk的使用


What is Shufti Pro?

Shufti Pro,一家总部位于英国的软件即服务(SaaS)提供商,是全球领先的实时身份验证服务提供商之一,覆盖230多个国家和地区,帮助企业遵守KYC、KYB和AML法规。该解决方案通过完全自动化的ID验证服务帮助公司确定并克服欺诈风险,包括文件认证、面部验证、同意验证、面部生物识别认证、电话验证、反洗钱筛查和两步验证。

用户友好的界面和简单的API集成流程使企业能够无缝地接纳合法客户,并有助于建立可信赖的B2B关系。Shufti Pro的身份验证服务适用于所有行业,包括金融科技、虚拟资产服务提供商、银行等。选择Shufti Pro可以打击犯罪、提高生产力并增强转化率,这一切只需不到一秒的时间。


Table of Contents


General Requirements

最低要求:

  • Android 6.0 (API level 23) 或更高版本
  • 网络连接
  • 摄像头

Permissions

Shufti Pro应用程序需要访问以下权限:

  • 摄像头
  • 外部存储

注意: 所有权限均由SDK处理。


SDK Installation Guide

在您的项目中,按照以下步骤操作:

  1. 运行此命令:dart pub add shuftipro_sdk(使用dart)或 flutter pub add shuftipro_sdk(使用flutter)。
  2. pubspec.yaml 中添加依赖项:
    dependencies:
      shuftipro_sdk: ^0.0.1
    
  3. 转到项目 > android > build.gradle 文件并添加以下内容:
    allprojects {
        repositories {
            google()
            mavenCentral()
            maven { url 'https://jitpack.io' } // 添加这一行
        }
    }
    
  4. 导入 'package:shuftipro_flutter_sdk/ShuftiPro.dart' 到您的类中以发送请求给ShuftiPro的SDK。

Verification Types You Can Get:

Shufti Pro的服务分为三种类型。您可以选择其中一种或全部来满足客户的需求。以下是验证服务的类型:

  • 带OCR: 嵌入OCR技术的验证服务API可以从用户的身份证件中提取个人身份信息,并作为单一身份验证过程的一部分进行认证。
  • 不带OCR: 如果您选择此项服务,客户需要额外提供其他形式的身份证明文件,而不仅仅是验证信息。
  • 混合视图验证: Shufti Pro的混合视图包括移动验证和基于HTML5的网页视图,将结果显示给最终用户。验证数据将以JSON对象的形式发送,类似于移动认证格式中的OCR/非OCR。如果OpenViewParameter的值设置为true,则启用混合视图,否则触发其他模型。

Integration

以下是一个示例项目,它将帮助您学习如何集成Shufti Pro的验证API。

Step 1: 创建AuthKeys对象(使用Client ID和Secret Key)

var authObject = {
  "auth_type": "basic_auth",
  "client_id": clientId,
  "secret_key": secretKey,
};

或者使用AccessToken创建AuthKeys对象:

var authObject = {
  "auth_type": "access_token",
  "access_token": accessToken,
};

AuthKeys对象参数详见此处

Step 2: 创建Config对象

Map<String, Object> configObj = {
  "open_webview": false,
  "asyncRequest": false,
  "captureEnabled": false,
};

Config对象参数详见此处

Step 4: 创建Request对象

Map<String, Object> createdPayload = {
  "country": "US",
  "reference": "12345678",
  "language": "EN",
  "email": "",
  "callback_url": "http://www.example.com",
  "redirect_url": "https://www.dummyurl.com/",
  "verification_mode": "image_only",
  "show_consent": 1,
  "show_privacy_policy": 1,
};

// 创建验证对象
Map<String, Object> verificationObj = {
  "face": {},
  "background_checks": {},
  "phone": {},
  "document": {
    "supported_types": [
      "passport",
      "id_card",
      "driving_license",
      "credit_or_debit_card",
    ],
    /* 保持以下字段为空以进行带OCR的请求 */
    "name": {
      "first_name": "Johon",
      "last_name": "Johsan",
      "middle_name": "Livone",
    },
    "dob": "",
    "document_number": "19901112",
    "expiry_date": "1996-11-12",
    "issue_date": "1990-11-12",
    "gender": "M",
    "backside_proof_required": "1",
  },

  // 创建与文档相关的对象
  "address": {
    "full_address": "ST#2, 937-B, los angeles.",
    "name": {
      "first_name": "Johon",
      "last_name": "Johsan",
      "middle_name": "Livone",
    },
    "supported_types": ["id_card", "utility_bill", "bank_statement", "passport", "driving_license"],
  },
  /* 保持以下字段为空以进行带OCR的请求 */
  
  "consent": {
    "supported_types": ["printed", "handwritten"],
    "text": "My name is John Doe and I authorize this transaction of \$100/-",
  },
};

// 添加面部验证服务到Payload
createdPayload["face"] = verificationObj['face'];

// 添加文档验证服务到Payload
createdPayload["document"] = verificationObj['document'];

// 添加第二个文档验证服务到Payload
createdPayload["document_two"] = verificationObj['document_two'];

// 添加地址验证服务到Payload
createdPayload["address"] = verificationObj['address'];

// 添加同意验证服务到Payload
createdPayload["consent"] = verificationObj['consent'];

Request对象参数详见此处


Initiate Request

ShuftiproSdk.sendRequest(authObject: authObject,
      createdPayload: createdPayload, configObject: configObj);

Auth Key Object Parameters

在此对象中,我们添加验证请求中的授权密钥。

Basic Auth

服务器通过Basic Auth头向客户端提供授权密钥。用户名将使用ID,而Secret Key将用作密码。每次API调用时都会请求此头。

Access Token

Shufti Pro提供了Bearer Access Token授权方法。客户端可以使用新的访问令牌端点生成临时访问令牌。与客户端共享的令牌将在10分钟内有效且只能使用一次。


Config Object Parameters

在此对象中,我们添加用户所需的验证配置。

open_webview

  • 必填:否
  • 类型:布尔值
  • 接受值:true, false
  • 默认值:false

此布尔类型参数决定是否运行或终止混合视图。

asyncRequest

  • 必填:否
  • 类型:布尔值
  • 接受值:true, false

如果此参数的值设置为True,则客户端会获得控制权并且无需等待验证结果完成。完成后会自动生成自动回调。

captureEnabled

  • 必填:否
  • 类型:布尔值
  • 接受值:true, false

此参数标识客户端是否希望在Iframe中打开摄像头。如果值设置为true,则打开摄像头,反之则关闭。


Request Object Parameters

Shufti Pro为其客户提供专属服务,并根据用户需求量身定制。您可以选择一个或多个可选API密钥。如果在文档或地址验证中提供了密钥但未提供值,则会对这些特定密钥执行OCR。

Reference

  • 必填:是
  • 类型:字符串
  • 最小长度:6个字符
  • 最大长度:250个字符

这是服务器将随每个响应一起发送的独特参考ID,以便您验证请求。仅允许字母数字值。

Country

  • 必填:否
  • 类型:字符串
  • 长度:2个字符
  • 输入2个字符长的ISO 3166-1 alpha-2国家代码。支持的国家列表详见这里

Language

  • 必填:否
  • 类型:字符串
  • 长度:2个字符
  • 输入2个字符长的语言代码,以便按客户需求查看验证结果。如果此键缺失,默认语言英语将被选中。支持的语言列表详见这里

Email

  • 必填:否
  • 类型:字符串
  • 最小长度:6个字符
  • 最大长度:128个字符

此字段表示最终用户的电子邮件。这是一个可选字段。

Callback URL

  • 必填:否
  • 类型:字符串
  • 最小长度:6个字符
  • 最大长度:250个字符

这将生成多个服务器到服务器调用,以保持您对验证状态的更新。这样,即使客户中途丢失,您也可以在您的端更新请求状态。

Verification Mode

  • 必填:否
  • 类型:字符串
  • 接受值:image_only, video_only, any

此定义允许用于验证的证明类型。如果视频_only模式,用户将上传视频;如果图像_only模式,用户将上传图像;任何模式允许两种类型的证明。

Show Privacy Policy

  • 必填:否
  • 类型:字符串
  • 接受值:0, 1

此键指定是否向用户显示隐私政策。如果show_privacy_policy为0,则不显示隐私政策。

Show Results

  • 必填:否
  • 类型:字符串
  • 接受值:0, 1

此键指定是否向用户显示验证结果。如果show_results为0,则不显示验证结果。

Show Consent

  • 必填:否
  • 类型:字符串
  • 接受值:0, 1

此键指定是否向用户显示同意。如果show_consent为0,则不显示同意屏幕。

Allow Online

  • 必填:否
  • 类型:字符串
  • 接受值:0, 1

此键指定是否需要捕获证明。1值表示用户必须捕获证明以进行验证。

Allow Offline

  • 必填:否
  • 类型:字符串
  • 接受值:0, 1

此键指定是否需要上传证明。1值表示用户必须上传证明以进行验证。


Customisations

Shufti Pro支持一组定制选项,这些选项将影响SDK的外观。通过更改<a href="https://github.com/shuftipro/Android_Core_SDK/blob/main/Core%20SDK/ShuftiProCore/app/src/main/res/values/colors.xml" rel="ugc">colors.xml</a>中相应的变量值,可以自定义按钮颜色和字体。

SDK中的字符串也可以通过<a href="https://github.com/shuftipro/Android_Core_SDK/blob/main/Core%20SDK/ShuftiProCore/app/src/main/res/values/strings.xml" rel="ugc">strings.xml</a>类进行定制。可以在提供的<a href="https://github.com/shuftipro/Android_Core_SDK/blob/main/Core%20SDK/ShuftiProCore/app/src/main/res/values/strings.xml" rel="ugc">strings.xml</a>中添加所需语言的翻译。

要应用并使用SDK中的暗色主题/模式,初始化SDK时在config对象中提供相应参数。

Map<String, Object> configObj = {
  ...
  "dark_mode" : false,
};

iOS

要自定义iOS模块的颜色,可以在config对象中使用所选的十六进制值。

Map<String, Object> configObj = {
  ...
  "font_color": "#263B54",
  "button_text_color": "#FFFFFF",
  "button_background_color": "#1F5AF6",
}

Localization

通过标准的iOS本地化机制,将您自己的Localizable.strings文件添加到iOS项目中。要更改特定文本,从<a href="https://github.com/shuftipro/Flutter-SDK/tree/main/ios/Runner/en.lproj/Localizable.strings" rel="ugc">这里</a>复制文件并覆盖相应的键。

Android

要自定义Android模块的UI,可以在<strong>"android&gt;app&gt;src&gt;main&gt;res&gt;values"</strong>目录中添加相关文件。

Colors

要更改颜色,添加<a href="https://github.com/shuftipro/Flutter-SDK/tree/main/android/app/src/main/res/values/colors.xml" rel="ugc"><strong>colors.xml</strong></a>文件到<a href="https://github.com/shuftipro/Flutter-SDK/tree/main/android/app/src/main/res/values" rel="ugc"><strong>values</strong></a>目录并覆盖以下变量:

<color name="light_button_color">#2B6AD8</color>
<color name="light_text_color">#1D2C42</color>
<color name="dark_button_color">#FF7A77</color>
<color name="dark_text_color">#ffffff</color>
<color name="button_text_color">#FFFFFFFF</color>
Localization

要自定义SDK中的文本,添加<strong>strings.xml</strong>文件到<a href="https://github.com/shuftipro/Flutter-SDK/tree/main/android/app/src/main/res/values" rel="ugc"><strong>values</strong></a>目录并覆盖定义在<a href="https://github.com/shuftipro/Flutter-SDK/tree/main/android/app/src/main/res/values/strings.xml" rel="ugc">这里</a>的相应字符串变量。


HTTP Codes

以下是Shufti Pro验证API响应中生成的HTTP代码列表。

HTTP Code HTTP Message Message
200 OK success
400 Bad Request bad request: one or more parameter is invalid or missing
401 Unauthorized unauthorized: invalid signature key provided in the request
402 Request Failed invalid request data: missing required parameters
403 Forbidden forbidden: service not allowed
404 Not Found resource not found
409 Conflict conflicting data: already exists
500 Server Error internal server error

Response Logging

验证响应将由函数返回。您可以保存或对响应做任何您想做的事情。

var response = await ShuftiproSdk.sendRequest(authObject: AuthObject,
  createdPayload: createdPayload, configObject: ConfigObject);

Status Response

如果发出状态请求,Shufti Pro验证API将发送JSON响应。

Reference

这是在请求时提供的用户的唯一请求引用,以便唯一识别响应。

Event

请求事件显示用户的请求状态,并且对于每个响应都不同。更多详细信息请单击此处。

Note

请求无效响应,HTTP状态码400表示请求无效。

Sample Response

{
  "reference": "17374217",
  "event": "request.declined",
  "error": "",
  "verification_url": ""
}

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

1 回复

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


shuftipro_demo_sdk 是一个用于身份验证的 Flutter 插件,通常用于与 Shufti Pro 服务集成,以实现身份验证、KYC(了解你的客户)等功能。以下是如何在 Flutter 项目中使用 shuftipro_demo_sdk 的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 shuftipro_demo_sdk 依赖:

dependencies:
  flutter:
    sdk: flutter
  shuftipro_demo_sdk: ^1.0.0  # 请确认最新版本

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

2. 初始化 SDK

在你的 Dart 代码中导入并初始化 shuftipro_demo_sdk

import 'package:shuftipro_demo_sdk/shuftipro_demo_sdk.dart';

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

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

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Shufti Pro Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            _startVerification();
          },
          child: Text('Start Verification'),
        ),
      ),
    );
  }

  void _startVerification() async {
    // Initialize the SDK with your credentials
    String clientId = 'YOUR_CLIENT_ID';
    String clientSecret = 'YOUR_CLIENT_SECRET';
    String callbackUrl = 'YOUR_CALLBACK_URL';

    ShuftiProDemoSdk.initialize(clientId, clientSecret, callbackUrl);

    // Start the verification process
    try {
      var result = await ShuftiProDemoSdk.startVerification();
      print('Verification Result: $result');
    } catch (e) {
      print('Error during verification: $e');
    }
  }
}
回到顶部