Flutter 用 ID Verification SDK を使用すると、電子的な顧客確認 (eKYC) 機能を Flutter アプリケーションに統合できます。このトピックでは、Flutter 用 ID Verification SDK をアプリケーションと統合する方法について説明し、例を示します。
使用上の注意
Flutter 用 ID Verification SDK では、シミュレーターはサポートされていません。開発とデバッグには、物理デバイスを使用してください。
iOS 9.0 以降、または Android 5.0 以降がサポートされています。
依存関係の構成
Flutter 用 ID Verification SDK をダウンロードし、パッケージを解凍します。
解凍したパッケージを格納するディレクトリをプロジェクトにコピーします。
プロジェクトの pubspec.yaml ファイルを変更し、aliyun_face_plugin 依存関係をファイルの dev_dependencies フィールドに追加します。
aliyun_face_plugin: path: aliyun_face_plugin
Android オペレーティングシステムの環境を構成する
依存関係を追加する
プロジェクトで、[android] > [build.gradle] を選択します。 build.gradle ファイルで、flatDir 構成を allprojects フィールドに追加します。
flatDir {
dirs project(':aliyun_face_plugin').file('libs')
}
ProGuard の難読化ルールを構成する
リリースシナリオで ProGuard 難読化ツールが構成されている場合は、[android] > [app] を選択し、次のコードを [proguard-rules.pro] ファイルに追加します。
-verbose
-keep class com.aliyun.identity.platform.api.** {*;}
-keep class com.aliyun.identity.IdentityUtils {*;}
-keep class com.aliyun.identity.ocr.IdentityOcrApi {*;}
-keep class com.aliyun.identity.platform.model.** {*;}
-keep class com.aliyun.identity.platform.config.** {*;}
-keep class com.aliyun.identity.face.IdentityFaceApi {*;}
-keep class com.face.verify.intl.** {*;}
-keep class com.alibaba.fastjson.** {*;}
-keep class com.aliyun.face.aliyun_face_plugin.** {*;}
-dontwarn okio.**
-keepclassmembers,allowobfuscation class * {
@com.alibaba.fastjson.annotation.JSONField <fields>;
}
iOS オペレーティングシステムの環境を構成する
カメラの権限を追加する
Xcode を開きます。プロジェクトを見つけ、左側のナビゲーションペインで [ios] > [runner.xcworkspace] を選択します。 [runner] プロジェクトを開きます。
[runner] プロジェクトの Info.plist ファイルにカメラの権限を追加します。次の図は例を示しています。ビジネス要件に基づいて [value] パラメーターを構成できます。
バンドルを追加する
Xcode の左側のナビゲーションペインで、[runner] をクリックします。 runner ページで、[build Phases] タブをクリックします。 [Build Phases] タブで、[copy Bundle Resources] セクションを見つけ、次のバンドルを追加します。
バンドルファイルは、Flutter 用 ID Verification SDK の Frameworks ディレクトリに格納されています。バンドルファイルへのパスは aliyun_face_plugin/ios/Products
です。各バンドルは .framework ファイルに対応しています。
ToygerService.bundle: ToygerService.framework に対応します。
AliyunIdentityPlatform.bundle: AliyunIdentityPlatform.framework に対応します。
AliyunIdentityOCR.bundle: AliyunIdentityOCR.framework に対応します。
AliyunIdentityFace.bundle: AliyunIdentityFace.framework に対応します。
-ObjC リンカーフラグを追加する
Xcode の左側のナビゲーションペインで、[pods] をクリックします。 Pods ページで、[build Settings] タブをクリックします。 [Build Settings] タブで、[linking] セクションの [other Linker Flags] を見つけ、[-objc] リンカーフラグを追加します。
操作の説明
Flutter 用 ID Verification SDK は、init、getMetaInfos、および verify の操作を提供します。
class AliyunFacePlugin {
// init 操作。
Future<void> init() {
return AliyunFacePluginPlatform.instance.init();
}
// getMetaInfos 操作。ID Verification は、クライアントからメタデータを取得して、サーバーから transcationId の値を取得します。
Future<String?> getMetaInfos() {
return AliyunFacePluginPlatform.instance.getMetaInfos();
}
// verify 操作。
Future<String?> verify(String key, String value) {
return AliyunFacePluginPlatform.instance.verify(key, value);
}
}
SDK を初期化する
アプリケーションをコールドスタートし、プライバシーポリシーを確認した後、できるだけ早く init
操作を呼び出して、Flutter 用 ID Verification SDK を初期化します。
メタデータを取得する
getMetaInfos
操作を呼び出して、クライアントの環境に関する情報を取得します。クライアントは、取得した情報に基づいてビジネスサーバーにリクエストを送信します。次に、ビジネスサーバーは初期化のリクエストを Alibaba Cloud に送信して、transactionId の値を取得します。この値は、以下の手順での検証に使用されます。
検証を開始する
verify
操作を呼び出して、eKYC リクエストを開始します。
key パラメーターは、文字列である transactionId に固定されています。
value パラメーターは、init 操作で取得した transactionId の値に固定されています。
レスポンスは
code,reason
形式です。 code はステータスコードを示し、reason はステータスコードの説明を示します。 code と reason の値はカンマ (,) で区切られます。code と reason の値の意味は、iOS オペレーティングシステムと Android オペレーティングシステムで異なります。詳細については、関連ドキュメントを参照してください。
transactionId の値は 1 回だけ使用できます。それ以外の場合はエラーが発生し、次のエラー情報が返されます。
iOS: [2002,zimnetworkfail]
Android: [1001,NET_RESPONSE_INVALID]
サンプルコード
import 'package:flutter/material.dart';
import 'dart:async';
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 操作を呼び出します。
_aliyunFacePlugin.init();
}
Future<void> getMetaInfos() async {
String metainfos;
try {
// クライアントのメタデータを取得し、メタデータを ID Verification に送信してから、ID Verification の関連操作を呼び出して transactionId の値を取得します。
metainfos = await _aliyunFacePlugin.getMetaInfos() ?? 'Unknown metainfos';
} on PlatformException {
metainfos = 'Failed to get metainfos.';
}
setState(() {
_infos = "metainfos: " + metainfos;
});
}
Future<void> startVerify() async {
String verifyResult;
try {
// verify 操作を呼び出します。最初に ID Verification の関連操作を呼び出して、transcationId の値を取得する必要があります。
// transcationId の値は 1 回だけ使用できます。それ以外の場合はエラーが発生します。iOS の場合はエラーコード 2002 が返され、Android の場合はエラーコード 1001 が返されます。
verifyResult = await _aliyunFacePlugin.verify(
"transactionId", "hksdecd1823a84321d7360dc5119****") ?? '-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")),
])),
),
);
}
}