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

プロジェクトの pubspec.yaml ファイルで、dev_dependencies フィールドに Alibaba Cloud プラグインへの依存関係を追加します。
aliyun_face_plugin: path: aliyun_face_plugin
Android 環境の設定
モジュールの依存関係の追加
プロジェクトの [android]>[build.gradle] ファイルで、flatDir 設定を allprojects フィールドに追加します。
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)、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 クライアントには、デバイスヘルパーとして知られるセキュリティモジュールが組み込まれています。デバイスヘルパーは、現地のデータ収集コンプライアンス要件を満たすために、さまざまなデータ報告リージョンを提供します。ユーザーの属性に基づいて、
CustomUrlとCustomHostを設定して、異なる報告サイトを指定できます。アプリケーションセッションのライフサイクルごとに指定できるデータ報告リージョンは 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 ドメイン名を使用するかどうかを示します:
| "1" |
DataSwitch | デバイス情報をいつ報告するかを制御します:
説明 デフォルト設定を推奨します。 | "1" |
CustomUrl | データ報告用のサーバードメイン名を設定します。 | 「各リージョンの CustomUrl」をご参照ください。 |
CustomHost | データ報告用のサーバーホストを設定します。 | "cloudauth-device.ap-southeast-1.aliyuncs.com" 説明 この例はシンガポールリージョン用です。他のリージョンのサーバーホストについては、「各リージョンの CustomUrl」をご参照ください。 |
MetaInfos の取得
getMetaInfos() API は、クライアントの環境コンテキストを返します。クライアントは MetaInfos をビジネスサーバーに送信します。その後、サーバーは MetaInfos を使用して Alibaba Cloud に初期化リクエストを送信します。このプロセスで、検証に必要な transactionId を取得します。
検証の開始
検証リクエストを開始するには verify() API を呼び出します。
verify() 操作のパラメーター:
必須パラメーター:
transactionIdオプションパラメーター:
戻り値: 戻り値は
code,reason形式の文字列です。この形式では、codeはエラーコード、reasonはエラーの説明です。コードと理由はコンマ (,) で区切られます。codeとreasonの意味は、iOS と Android プラットフォームによって異なる場合があります。詳細については、各プラットフォームのドキュメントをご参照ください。
setCustomUI() API を呼び出して UI カラーをカスタマイズします。
パラメーター:
configuration。このパラメーターは 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 {
// クライアントの 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 バージョンを使用するようにしてください。