すべてのプロダクト
Search
ドキュメントセンター

ID Verification:Flutter との統合

最終更新日:Nov 19, 2025

ID Verification は、Flutter アプリケーションに電子的な顧客確認 (eKYC) のリモート本人確認機能を追加するために使用できる Flutter プラグインを提供します。このトピックでは、統合プロセスについて説明し、サンプルコードを提供します。

制限事項

  • ソフトウェア開発キット (SDK) はエミュレーターをサポートしていません。開発とデバッグには物理デバイスを使用する必要があります。

  • システム要件: iOS 9.0 以降および Android 5.0 以降。

依存関係の構成

  1. Flutter SDK をダウンロードしてファイルを解凍します。

  2. Flutter SDK フォルダ全体をプロジェクトにコピーします。

    image.png

  3. プロジェクトの pubspec.yaml ファイルで、dev_dependencies フィールドに Alibaba Cloud プラグインへの依存関係を追加します。

    aliyun_face_plugin:
        path: aliyun_face_plugin

    image.png

Android 環境の構成

モジュールの依存関係の追加

プロジェクトの [android] > [build.gradle] ファイルで、allprojects フィールドに flatDir 構成を追加します。

flatDir {
    dirs project(':aliyun_face_plugin').file('libs')
}

image.png

Proguard 難読化ルールの構成

リリースシナリオでコードの難読化のために Proguard を構成している場合は、プロジェクトの [android] > [app] > [proguard-rules.pro] ファイルに次のルールを追加します。

-verbose
-keep class com.idv.identity.platform.api.** {*;}
-keep class com.idv.identity.platform.log.** {*;}
-keep class com.idv.identity.util.IdentityUtils {*;}
-keep class com.idv.identity.ocr.IdentityOcrApi {*;}
-keep class com.idv.identity.platform.model.** {*;}
-keep class com.idv.identity.platform.config.** {*;}
-keep class com.idv.identity.face.IdentityFaceApi {*;}


-keep class com.face.verify.intl.** {*;}
-keep class com.alibaba.fastjson.** {*;}
-keep class face.security.device.api.** {*;}
-keep class net.security.device.api.** {*;}
-keep class com.dtf.toyger.** { *; }
-dontwarn net.security.device.api.**
-dontwarn face.security.device.api.**


-keep class com.idv.identity.service.algorithm.** {*;}
-keep class com.idv.identity.base.algorithm.** {*;}
-keep class com.idv.identity.quality.QualityRouter {*;}
-keep class com.idv.identity.blink.BlinkRouter {*;}
-keep class com.idv.identity.service.IdentityFaceService {*;}
-keep class com.idv.identity.service.ocr.IdentityDocService {*;}

-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**



# NFC
-keep class com.idv.identity.nfc.IdentityNfcApi { *; }
-keep class org.jmrtd.** {*;}
-keep class net.sf.**{*;}
-keep class org.**{*;}
-keep class cn.**{*;}


# 警告を抑制するために、これらのルールを既存の keep ルールに追加してください。
# これは Android Gradle プラグインによって自動的に生成されます。
-dontwarn com.fasterxml.**
-dontwarn com.google.**
-dontwarn java.applet.Applet
-dontwarn java.awt.**
-dontwarn javax.**
-dontwarn org.**
-dontwarn retrofit2.**
-dontwarn springfox.documentation.spring.web.json.Json

# オプション: ログの難読化
-assumenosideeffects class android.util.Log {
    public static *** d(...);
}

iOS 環境の構成

カメラ権限の追加

  1. プロジェクトで、[iOS] > [Runner.xcworkspace] に移動して、Xcode で [Runner] プロジェクトを開きます。

  2. [Runner] プロジェクトの Info.plist ファイルにカメラの権限を追加します。必要に応じて [Value] をカスタマイズします。

    image.png

バンドルの追加

[Runner] を選択し、[Build Phases] タブをクリックします。[Copy Bundle Resources] セクションで、次の 4 つのバンドルを追加します。

バンドルファイルは、SDK フォルダの aliyun_face_plugin/ios/Products パスにあり、それぞれのフレームワークディレクトリ内にあります。

  • ToygerService.bundle: ToygerService.framework にあります。

  • AliyunIdentityPlatform.bundle: AliyunIdentityPlatform.framework にあります。

  • AliyunIdentityOCR.bundle: AliyunIdentityOCR.framework にあります。

  • AliyunIdentityFace.bundle: AliyunIdentityFace.framework にあります。

image.png

-ObjC リンカーフラグの追加

[Pods] を選択し、[Build Settings] タブをクリックします。[Linking] で、[Other Linker Flags][-ObjC] フラグを追加します。

image.png

API リファレンス

Flutter SDK には、SDK の初期化 (initWithOptions)、MetaInfo の取得 (getMetaInfos)、検証の開始 (verify)、UI のカスタマイズ (setCustomUI) の 4 つの API 操作が含まれています。

class AliyunFacePlugin {
  // SDK を初期化します。
  Future<void> init() {
    return AliyunFacePluginPlatform.instance.init();
  }
  // オプションを指定して SDK を初期化します。
  Future<void> initWithOptions(Map<String, String> options) {
    return AliyunFacePluginPlatform.instance.initWithOptions(options);
  }

  // クライアントの metainfo を取得します。metainfo は、サーバーからトランザクション ID を取得するために使用されます。
  Future<String?> getMetaInfos() {
    return AliyunFacePluginPlatform.instance.getMetaInfos();
  }
  
  // 検証プロセスを開始します。
    Future<String?> verify(Map<String, String> params) {
    return AliyunFacePluginPlatform.instance.verify(params);
  }
  
  // UI をカスタマイズします。
  Future<String?> setCustomUI(String configuration) {
    return AliyunFacePluginPlatform.instance.setCustomUI(configuration);
  }
}

SDK の初期化

initWithOptions(options) 操作は SDK を初期化します。ユーザーがプライバシーポリシーに同意した後、できるだけ早く、アプリケーションのコールドスタート中にこの操作を呼び出します。

options: 情報収集のためのオプションパラメーターを指定します。このパラメーターはオプションです。オプションパラメーターは次のとおりです。

説明
  • ID Verification クライアントには、Device Guard セキュリティモジュールが組み込まれています。さまざまなリージョンのデータ収集コンプライアンス要件を満たすために、さまざまなデータレポートサイトを提供します。ユーザー属性に基づいてレポートサイトを指定するために、CustomUrl と CustomHost を設定できます。

    注: 1 つのアプリケーションセッションライフサイクル内で指定できるレポートサイトは 1 つだけです。サーバーのクエリリージョンはレポートサイトと一致する必要があります。

  • レポートサイトの指定:

    • シンガポールサイト (デフォルト): https://cloudauth-device.ap-southeast-1.aliyuncs.com

    • インドネシアサイト: https://cloudauth-device.ap-southeast-5.aliyuncs.com

    • 米国西部 (シリコンバレー): https://cloudauth-device.us-west-1.aliyuncs.com

    • ドイツ (フランクフルト): https://cloudauth-device.eu-central-1.aliyuncs.com

    • 中国 (香港): https://cloudauth-device.cn-hongkong.aliyuncs.com

  • プロダクトサーバーでサポートされているリージョンの詳細については、「サポートされているリージョン」をご参照ください。

フィールド名

説明

IPv6

デバイス情報をレポートするために IPv6 ドメイン名を使用するかどうかを指定します。

  • 0 (デフォルト): いいえ (IPv4 ドメイン名を使用)

  • 1: はい (IPv6 ドメイン名を使用)

"1"

DataSwitch

デバイス情報をレポートするタイミング。

  • 0 (デフォルト): 初期化時

  • 1: トークン取得時

説明

デフォルトの構成を使用することをお勧めします。

"1"

CustomUrl

データレポートサーバーのドメイン名を設定します。

"https://cloudauth-device.ap-southeast-1.aliyuncs.com"

CustomHost

データレポートサーバーのホストを設定します。

"cloudauth-device.ap-southeast-1.aliyuncs.com

MetaInfo の取得

getMetaInfos() 操作は、クライアントの環境コンテキストを返します。クライアントは MetaInfo をビジネスサーバーに送信します。サーバーは MetaInfo を使用して初期化リクエストを Alibaba Cloud に送信します。このプロセスは、検証に必要な transactionId を取得するために使用されます。

検証の開始

検証リクエストを開始するには、verify() 操作を呼び出します。

  • verify() 操作のパラメーター:

    • 必須パラメーター: transactionId

    • オプションパラメーター:

      オプションパラメーター (extParams) の構成方法の詳細については、ネイティブの Android および iOS SDK のドキュメントをご参照ください。

      Android

      キー

      説明

      例 (文字列)

      IdentityParams.OcrResultButtonColor

      OCR 結果ページの下部にあるボタンの色。

      #FF0000

      IdentityParams.RoundProgressColor

      顔スキャン中の円の色。

      #FF0000

      IdentityParams.ShowAlbumIcon

      証明書 OCR ステップで、アルバムアップロードエントリを表示するかどうかを指定します。

      • 1 (デフォルト): 表示

      • 0: 表示しない

      1

      IdentityParams.ShowOcrResult

      証明書 OCR ステップで、結果ページを表示するかどうかを指定します。

      • 1 (デフォルト): 表示

      • 0: 表示しない

      1

      IdentityParams.EditOcrResult

      証明書 OCR ステップで、結果ページが編集可能かどうかを指定します。

      • 1 (デフォルト): 編集可能

      • 0: 編集不可

      1

      IdentityParams.MaxErrorTimes

      再試行の最大回数。

      有効値は 3~10 です。デフォルトは 10 です。

      10

      IdentityParams.CardOcrTimeOutPeriod

      OCR ステップのタイムアウト期間。

      有効値は 20~60 秒です。デフォルトは 20 秒です。

      20

      IdentityParams.FaceVerifyTimeOutPeriod

      生体情報収集および検出ステップのタイムアウト期間。

      有効値は 20~60 秒です。デフォルトは 20 秒です。

      20

      IdentityParams.OcrResultTimeOutPeriod

      OCR 結果ページが編集可能な期間。

      この値はカスタマイズできます。デフォルトでは、制限はありません。

      60

      IdentityParams.SdkLanguage

      SDK の言語設定をカスタマイズできます。デフォルトでは、SDK はモバイルデバイスのシステム言語を使用します。

      説明

      SDK でサポートされている言語のリストについては、「Android および iOS SDK のカスタム言語」をご参照ください。

      zh-Hans

      IdentityParams.CloseButtonLayout

      閉じるボタンのレイアウト。

      • left (デフォルト): 左側

      • right: 右側

      left

      IdentityParams.WaterMark

      OCR スキャンが成功した後のウォーターマークテキスト。

      テスト用のウォーターマークテキスト

      IdentityParams.Protocol

      SDK プロトコル。

      説明

      サーバー側の Initialize API から `protocol` を取得し、拡張パラメーターで渡します。これにより、SDK 内の内部 API のやり取りが減り、ネットワークエクスペリエンスが向上します。

      なし

      iOS

      キー

      説明

      例 (文字列)

      kIdentityParamKeyNextButtonColor

      OCR 結果ページの下部にあるボタンの色。

      #FF0000

      kIdentityParamKeyRoundProgressColor

      顔スキャン中の円の色。

      #FF0000

      kIdentityParamKeyOcrSelectPhoto

      証明書 OCR 中にフォトアルバムからアップロードするためのエントリを表示するかどうかを指定します。

      • 1 (デフォルト): 表示

      • 0: 表示しない

      1

      kIdentityParamKeyShowOcrResult

      証明書 OCR 後に結果ページを表示するかどうかを指定します。

      • 1 (デフォルト): 表示

      • 0: 表示しない

      1

      kIdentutyParamKeyEditOcrResult

      証明書 OCR 後に結果ページが編集可能かどうかを指定します。

      • 1 (デフォルト): 編集可能

      • 0: 編集不可

      1

      kIdentityParamKeyMaxRetryCount

      再試行の最大回数。3 から 10 までの値を設定できます。デフォルト値は 10 です。

      10

      kIdentityParamKeyCardOcrTimeOutPeriod

      OCR ステップのタイムアウト期間。20 から 60 秒までの値を設定できます。デフォルト値は 20 秒です。

      20

      kIdentityParamKeyFaceVerifyTimeOutPeriod

      生体情報収集および検出ステップのタイムアウト期間。20 から 60 秒までの値を設定できます。デフォルト値は 20 秒です。

      20

      kIdentityParamKeyCardOcrEditTimeOutPeriod

      OCR 結果ページが編集可能な期間。60 から 180 秒までの値を設定できます。デフォルトでは、制限はありません。

      180

      kIdentityParamKeyLanguage

      SDK のカスタム言語設定。デフォルトでは、SDK はモバイルデバイスのオペレーティングシステムの言語を使用します。

      説明

      SDK でサポートされている言語のリストについては、「Android および iOS SDK のカスタム言語」をご参照ください。

      zh-Hans

      kIdentityParamKeyDefaultLanguage

      SDK のデフォルト言語設定。有効な値については、kIdentityParamKeyLanguage フィールドをご参照ください。

      デフォルト値は en で、英語を示します。

      en

      kIdentityParamKeyCloseButtonPosition

      SDK の閉じるボタンの位置:

      • left (デフォルト): 左

      • right: 右

      left

      kIdentityParamKeyWatermark

      OCR が成功した後のウォーターマークテキスト。

      テスト用のウォーターマークテキスト

      kIdentutyParamKeyProtocol

      SDK プロトコル。

      説明

      サーバー側の Initialize API からプロトコルを取得し、拡張パラメーターで渡します。これにより、SDK 内の内部 API のやり取りが減り、ネットワークエクスペリエンスが向上します。

      968412EB*******...

  • 戻り値: 戻り値は code,reason というフォーマットの文字列です。このフォーマットでは、code はエラーコード、reason はエラーの説明です。コードと理由はコンマ (,) で区切られます。

    codereason の意味は、iOS と Android プラットフォームで異なる場合があります。詳細については、各プラットフォームのドキュメントをご参照ください。

UI の色をカスタマイズするには、setCustomUI() 操作を呼び出します。

説明

transactionId は一度しか使用できません。そうしないと、エラーが返されます。エラーメッセージは次のとおりです。

  • iOS: 2002: ZIM network failure.

  • Android: 1001, NET_RESPONSE_INVALID

サンプルコード

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:io';

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _infos = 'Unknown';
  final _aliyunFacePlugin = AliyunFacePlugin();

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

    // アプリの起動プロセスの早い段階で init 操作を呼び出します。
    Map<String, String> options = {"CustomUrl":"https://cloudauth-device.ap-southeast-5.aliyuncs.com",
                                   "CustomHost":"cloudauth-device.ap-southeast-5.aliyuncs.com"};
    _aliyunFacePlugin.initWithOptions(options);
  }

  Future<void> getMetaInfos() async {
    String metainfos;

    try {
      // クライアントの metainfo を取得します。この情報をサーバーに送信して、関連するサーバー側の API 操作を呼び出し、トランザクション ID を取得します。
      metainfos = await _aliyunFacePlugin.getMetaInfos() ?? 'Unknown metainfos';
    } on PlatformException {
      metainfos = 'Failed to get metainfos.';
    }

    setState(() {
      _infos = "metainfos: " + metainfos;
    });
  }

  Future<void> setCustomUi() async {
    try {
      String config = "{\"faceConfig\":{ \"faceBGColor\": \"#FF33FF\"}}";
      await _aliyunFacePlugin.setCustomUI(config) ?? '-1,error';
    } on PlatformException {
      '-2,exception';
    }
  }

  Future<void> startVerify() async {
    String verifyResult;
    try {
      String transactionId = "xxxx"; // トランザクション ID。
      Map<String, String> params = {
        "transactionId": transactionId,
      };
      if (Platform.isIOS) {
        params.addAll({"kIdentityParamKeyLanguage": "en"});
      } else if (Platform.isAndroid) {
        params.addAll({"SdkLanguage": "en"});
      }

      verifyResult = await _aliyunFacePlugin.verify(params) ?? '-1,error';
    } on PlatformException {
      verifyResult = '-2,exception';
    }

    setState(() {
      _infos = "verifyResult: " + verifyResult;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Aliyun face plugin demo')),
        body: Center(
          child: Column(children: <Widget>[
            Text('$_infos\n'),
            ElevatedButton(
              onPressed: () async {
                getMetaInfos();
              },
              child: Text("getMetaInfos")),
            ElevatedButton(
              onPressed: () async {
                startVerify();
              },
              child: Text("startVerify")),
            ElevatedButton(
              onPressed: () async {
                setCustomUi();
              },
              child: Text("setCutomUi")),
          ])),
      ),
    );
  }
}

完全なコードを表示するには、Flutter デモをダウンロードしてください。

重要

このデモコードは統合リファレンス専用です。プロジェクトでは最新の SDK バージョンを使用するようにしてください。