ID Verification は、Flutter アプリケーションに電子的な顧客確認 (eKYC) のリモート本人確認機能を追加するために使用できる Flutter プラグインを提供します。このトピックでは、統合プロセスについて説明し、サンプルコードを提供します。
制限事項
ソフトウェア開発キット (SDK) はエミュレーターをサポートしていません。開発とデバッグには物理デバイスを使用する必要があります。
システム要件: iOS 9.0 以降および Android 5.0 以降。
依存関係の構成
Flutter SDK をダウンロードしてファイルを解凍します。
Flutter SDK フォルダ全体をプロジェクトにコピーします。

プロジェクトの pubspec.yaml ファイルで、dev_dependencies フィールドに Alibaba Cloud プラグインへの依存関係を追加します。
aliyun_face_plugin: path: aliyun_face_plugin
Android 環境の構成
モジュールの依存関係の追加
プロジェクトの [android] > [build.gradle] ファイルで、allprojects フィールドに flatDir 構成を追加します。
flatDir {
dirs project(':aliyun_face_plugin').file('libs')
}
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 環境の構成
カメラ権限の追加
プロジェクトで、[iOS] > [Runner.xcworkspace] に移動して、Xcode で [Runner] プロジェクトを開きます。
[Runner] プロジェクトの Info.plist ファイルにカメラの権限を追加します。必要に応じて [Value] をカスタマイズします。

バンドルの追加
[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 にあります。

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

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 ドメイン名を使用するかどうかを指定します。
| "1" |
DataSwitch | デバイス情報をレポートするタイミング。
説明 デフォルトの構成を使用することをお勧めします。 | "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
オプションパラメーター:
戻り値: 戻り値は
code,reasonというフォーマットの文字列です。このフォーマットでは、codeはエラーコード、reasonはエラーの説明です。コードと理由はコンマ (,) で区切られます。codeとreasonの意味は、iOS と Android プラットフォームで異なる場合があります。詳細については、各プラットフォームのドキュメントをご参照ください。
UI の色をカスタマイズするには、setCustomUI() 操作を呼び出します。
パラメーター:
params。このパラメーターは JSON フォーマットのデータを受け入れます。UI カスタマイズ構成の詳細については、ネイティブ SDK のドキュメントをご参照ください。
各 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 バージョンを使用するようにしてください。