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

ID Verification:Flutter との統合

最終更新日:Jun 30, 2026

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

制限事項

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

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

依存関係の設定

  1. 「SDK リリースノート」に移動して 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] ファイルで、flatDir 設定を allprojects フィールドに追加します。

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)、MetaInfos の取得 (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);
  }

  // クライアントの metainfos を取得します。この metainfos はサーバーからトランザクション 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) API は SDK を初期化します。この API は、ユーザーがプライバシーポリシーに同意した後、できるだけ早くアプリケーションのコールドスタート中に呼び出してください。

options パラメーターは、デフォルトでは null で、オプションのデータ収集設定を指定します。

重要
  • ID Verification クライアントには、デバイスヘルパーとして知られるセキュリティモジュールが組み込まれています。デバイスヘルパーは、現地のデータ収集コンプライアンス要件を満たすために、さまざまなデータ報告リージョンを提供します。ユーザーの属性に基づいて、CustomUrlCustomHost を設定して、異なる報告サイトを指定できます。

  • アプリケーションセッションのライフサイクルごとに指定できるデータ報告リージョンは 1 つだけです。サーバー側のクエリのリージョンは、報告リージョンと一致する必要があります。サポートされるリージョンはプロダクトによって異なります。詳細については、「サポートされるリージョン」をご参照ください。

  • 各リージョンの CustomUrl は以下の通りです:

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

    • シンガポール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.ap-southeast-3.aliyuncs.com

パラメーター

説明

IPv6

デバイス情報を報告するために IPv6 ドメイン名を使用するかどうかを示します:

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

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

"1"

DataSwitch

デバイス情報をいつ報告するかを制御します:

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

  • 1:トークン取得時

説明

デフォルト設定を推奨します。

"1"

CustomUrl

データ報告用のサーバードメイン名を設定します。

各リージョンの CustomUrl」をご参照ください。

CustomHost

データ報告用のサーバーホストを設定します。

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

説明

この例はシンガポールリージョン用です。他のリージョンのサーバーホストについては、「各リージョンの CustomUrl」をご参照ください。

MetaInfos の取得

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

検証の開始

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

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

    • 必須パラメーター: transactionId

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

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

      Android

      キー

      説明

      例 (文字列型)

      IdentityParams.OcrResultButtonColor

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

      #FF0000

      IdentityParams.RoundProgressColor

      顔スキャン中の円の色です。

      #FF0000

      IdentityParams.ShowBlbumIcon

      ドキュメント 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 はモバイルデバイスのシステム言語を使用します。

      説明

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

      zh-Hans

      IdentityParams.CloseButtonLayout

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

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

      • right:右側

      left

      IdentityParams.WaterMark

      OCR 成功後のウォーターマークテキストです。

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

      IdentityParams.Protocol

      SDK プロトコルです。

      説明

      サーバー側の 初期化 API を通じて プロトコル を取得します。拡張パラメーターで渡すことにより、SDK 内部の API インタラクションが減り、ネットワークエクスペリエンスが向上します。

      なし

      iOS

      Key

      Description

      Example (string)

      kIdentityParamKeyNextButtonColor

      OCR 認識結果ページの下部ボタンの色。

      #FF0000

      kIdentityParamKeyRoundProgressColor

      顔スキャン中の円形プログレスインジケーターの色。

      #FF0000

      kIdentityParamKeyOcrSelectPhoto

      ID OCR 認識ステップ中に、フォトアルバムからのアップロード導線を表示するかどうかを指定します:

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

      • 0:非表示

      1

      kIdentityParamKeyShowOcrResult

      ID OCR 認識ステップ後に、認識結果ページを表示するかどうかを指定します:

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

      • 0:非表示

      1

      kIdentityParamKeyEditOcrResult

      ID 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 は OS の言語を使用します。

      説明

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

      zh-Hans

      kIdentityParamKeyDefaultLanguage

      デフォルトの SDK 言語を設定します。有効な値の一覧は、kIdentityParamKeyLanguage を参照してください。

      デフォルト値は en (English) です。

      en

      kIdentityParamKeyCloseButtonPosition

      SDK UI における閉じるボタンの位置。

      • left (デフォルト)

      • right

      left

      kIdentityParamKeyWatermark

      OCR 認識が成功した後に表示されるウォーターマークのテキスト。

      Test watermark text

      kIdentityParamKeyProtocol

      SDK のプロトコル。

      説明

      サーバー側の Initialize API を呼び出して protocol を取得し、このパラメータに渡します。これにより SDK 内部での API のやり取りが減り、ネットワークパフォーマンスが向上します。

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

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

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

setCustomUI() API を呼び出して UI カラーをカスタマイズします。

説明

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 {
      // クライアントの metainfos を取得します。この情報をサーバーに送信して関連するサーバー側 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("setCustomUi")),
          ])),
      ),
    );
  }
}

「SDK リリースノート」に移動して Flutter Demo をダウンロードし、完全なコードを確認してください。

重要

このデモコードは統合の参照のみを目的としています。プロジェクトでは最新の SDK バージョンを使用するようにしてください。