ID Verification は、eKYC リモート本人確認機能をアプリに追加するために使用できる Android クライアントソフトウェア開発キット (SDK) を提供します。サーバー側の初期化 API を呼び出して、一意の `transactionId` を取得します。次に、`transactionId` を使用してクライアント SDK を起動します。この Topic では、Android クライアントを統合する方法を説明し、コード例を示します。
制限事項
この SDK は、Android 4.3 以降を実行する電話やタブレットなどのモバイルデバイスをサポートします。x86 アーキテクチャはサポートされていません。
権限の説明
セキュリティを強化するため、SDK には次の権限が必要です。
権限 | 必須 | 説明 |
android.permission.INTERNET | はい | ネットワーク権限。Android SDK が動作するには、インターネット接続が必要です。 |
android.permission.ACCESS_NETWORK_STATE | いいえ (推奨) | |
android.permission.CAMERA | はい | カメラ権限。これは Android 6.0 以降の動的権限です。 |
SDK のダウンロードと構成
Android SDK をダウンロードします。SDK は標準の Android Archive (AAR) パッケージです。
ダウンロードが完了したら、パッケージを解凍します。Android SDK フォルダからすべての AAR ファイルをプロジェクトの `libs` ディレクトリにコピーします。次に、プロジェクトの `build.gradle` ファイルに次の依存関係を追加します。
dependencies { // SDK モジュール implementation files('libs/idv-identityplatform-xxx.aar') implementation files('libs/idv-identityface-xxx.aar') implementation files('libs/idv-ientitycrypto-xxx.aar') implementation files('libs/idv-identityocr-xxx.aar') implementation files('libs/tygerservice-xxx.aar') implementation files('libs/Android-AliyunFaceGuard-xxx.aar') implementation files('libs/idv-identitybase-sdk-xxx.aar') implementation files('libs/idv-identityservice-sdk-xxx.aar') implementation files('libs/idv-identityquality-sdk-xxx.aar') implementation files('libs/idv-identityblink-sdk-xxx.aar') implementation files('libs/idv-identitymnn-xxx.aar') implementation files('libs/idv-identityocrservice-xxx.aar') implementation files('libs/idv-identitynfc-xxx.aar') implementation files('libs/IDOCR_PubSDK_Android-1.0.0.aar') // または、fileTree を使用して、指定した IDV ID Verification サービス SDK ディレクトリ内の AAR ファイルへの依存関係を追加します。 //implementation(fileTree(dir: "libs", includes: ["*.aar"])) implementation "androidx.appcompat:appcompat:1.5.0" implementation "androidx.activity:activity:1.7.0" implementation "androidx.recyclerview:recyclerview:1.0.0" implementation 'com.squareup.okhttp3:okhttp:4.9.3' implementation 'com.squareup.okio:okio:2.8.0' implementation 'com.aliyun.dpa:oss-android-sdk:2.9.21' implementation 'com.alibaba:fastjson:1.1.72.android' }説明上記のコードでは、`xxx` は SDK のバージョン番号を表します。
SDK が正しく機能するには、すべてのサードパーティの依存ライブラリが必要です。
API リファレンス
Android SDK には、`install`、`getMetaInfo`、および `verify` API が含まれています。
SDK の初期化 (install)
関数プロトタイプ
public void install(Context context); public void install(Context context,Map<String, String> options);パラメーター
context: 現在のアプリケーションのコンテキスト。
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 の取得 (getMetaInfo)
関数プロトタイプ
public static String getMetaInfo(Context context);パラメーター
名前
タイプ
説明
context
Context
現在のアプリケーションのコンテキスト。
戻り値: モバイルデバイスの環境コンテキストを含む文字列を JSON フォーマットで返します。
{ "apdidToken": "", "appName": "com.aliyun.identity.platform", "appVersion": "1.0.1", "bioMetaInfo": "5.1.0:11501568,4", "deviceBrand": "xxx", "deviceManufacturer": "xxx", "deviceModel": "xxx", "deviceType": "android", "identityVer": "1.0.0", "osVersion": "10", "sdkVersion": "1.0.9" }
検証の開始 (verify)
このメソッドを呼び出す前に、MetaInfo をサーバーに送信し、Initialize API を呼び出して transactionId を取得していることを確認してください。
最新バージョンでは protocol フィールドが追加されています。extParams パラメーターを使用して protocol の値を渡してください。
関数プロトタイプ
public void verify(String transactionId, Map<String, String> extParams, IdentityCallback callback);パラメーター
名前
タイプ
説明
transactionId
String
サーバー側の Initialize API から取得した `transactionId`。
重要各 `transactionId` は `verify` 関数を 1 回だけ呼び出すために使用できます。各呼び出しの前に新しい `transactionId` を取得してください。
extParams
Map<String, String>
拡張パラメーター。通常は `null` を渡すことができます。
サポートされているカスタムフィールドは、以下の extParams 構成 テーブルにリストされています。
callback
IdentityCallback
検証結果のコールバックインターフェイス。コールバックのリターンコードについては、以下の IdentityResponse.code テーブル をご参照ください。
コールバックは次のように定義されます。
public class IdentityResponse { // 「リターンコード」の説明をご参照ください。 public int code; // 結果コードの説明。 public String message; } public interface IdentityCallback { boolean response(IdentityResponse response); }extParams 構成
キー
説明
例 (文字列)
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 のやり取りを減らし、ネットワークエクスペリエンスを向上させることができます。
なし
IdentityResponse.code テーブル
エラーコード
課金対象
結果コードの説明
1000
はい
ユーザーは顔スキャンプロセスを完了し、推奨される検証結果は「pass」です。この結果は参照用です。サーバー側の CheckResult API を呼び出して最終的な検証結果を取得し、処理を続行してください。
1001
はい
ユーザーは顔スキャンプロセスを完了し、推奨される検証結果は「fail」です。この結果は参照用です。サーバー側の CheckResult API を呼び出して最終的な検証結果、失敗の詳細な理由を取得し、処理を続行してください。
1002
いいえ
システムエラー。
1003
いいえ
SDK の初期化に失敗しました。クライアントの時刻が正しいか確認してください。
1004
いいえ
カメラ権限エラー。問題を解決するには、次のステップを試してください。
検証の前に、アプリにカメラ権限があることを確認してください。
権限が付与されてもエラーが続く場合は、アプリのキャッシュをクリアして再試行してください。
1005
いいえ
ネットワークエラー。
1006
いいえ
ユーザーが終了しました。
1007
いいえ
無効な TransactionId。
1009
いいえ
クライアントのタイムスタンプエラー。
1011
いいえ
不正な証明書タイプが送信されました。
1012
いいえ
スキャンされた証明書のキー情報が欠落しているか、フォーマット検証に失敗しました。
1013
いいえ
イメージの品質が低いです。
1014
いいえ
エラーの数が上限を超えました。
1015
いいえ
Android システムのバージョンが低すぎます。
1016
いいえ
カメラ権限が付与されていません。
コード例
public class MainActivity extends AppCompatActivity {
private String transactionId = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// SDK を初期化する
IdentityPlatform.getInstance().install(MainActivity.this);
// MetaInfo を取得する
String metaInfo = IdentityPlatform.getMetaInfo(MainActivity.this);
/**
* MetaInfo をアプリサーバーに送信します。クラウドの Initialize API を呼び出して transactionId を取得します。
* 最新バージョンはプロトコルデータも返します。
*/
// transactionId = getTransactionIdFromServer(metaInfo).transactionId;
// protocol = getTransactionIdFromServer(metaInfo).protocol;
Map<String, String> extParams = new HashMap();
// プロトコルデータを設定する
extParams.put(IdentityParams.PROTOCOL, protocol);
// SDK の言語を設定する
extParams.put(IdentityParams.SdkLanguage, "en");
// 検証を開始する
IdentityPlatform.getInstance().verify(transactionId, extParams,
new IdentityCallback() {
@Override
public boolean response(final IdentityResponse response) {
if (IdentityResponseCode.IDENTITY_SUCCESS == response.code) {
Toast.makeText(MainActivity.this,
"検証に成功しました", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this,
"検証に失敗しました ([" + response.code + "]" +
response.message + ")",
Toast.LENGTH_LONG).show();
}
return true;
}
});
}
}難読化構成
-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(...);
}デモコードパッケージ
Android デモをダウンロードして試すことができます。
コンポーネントのトリミング
モジュール名 | トリミング可能 | 注 | コンパイル後のサイズ | ||
デュアルアーキテクチャ | ARM64 | ARMv7 | |||
idv-identitybase-[version].aar | トリミング不可 | ベースモジュール。 | 16.3 KB | ||
idv-identityplatform-[version].aar | トリミング不可 | ベースモジュール。 | 140.9 KB | ||
idv-identitycrypto-[version].aar | トリミング不可 | ベースモジュール。 | 508.1 KB | 295.3 KB | 212.8 KB |
idv-identityface-[version].aar | トリミング不可 | 顔認識 UI のベースモジュール。 | 173.58 KB | ||
tygerservice-[version].aar | トリミング不可 | 顔認識のベースモジュール。 | 2.6 MB | 1.67 MB | 1.4 MB |
idv-identitymnn-[version].aar. | トリミング不可 | mnn モジュールは、近距離/遠距離の生体検知、顔の品質、および自動 OCR スキャンのためのベースコンポーネントです。このモジュールをトリミングすると、これらの機能は利用できなくなります。 | 1405.1 KB | 853 KB | 552.1 KB |
idv-identityservice-sdk-[version].aar | トリミング不可 | 顔の生体検知。 | 969 KB | 729.8 KB | 514.8 KB |
idv-identityblink-sdk-[version].intl.aar | トリミング不可 | まばたきモジュール。 | 352 KB | ||
idv-identityquality-sdk-[version].aar | トリミング可能 | 顔の品質とオクルージョン検出モジュール。この機能が不要な場合はトリミングできます。 | 271 KB | ||
idv-identityocr-[version].aar | トリミング可能 | OCR モジュール。eKYC 検証を使用する場合、このモジュールはトリミングできません。 | 336.3 KB | ||
idv-identityocrservice-[version].aar | トリミング可能 | OCR サービスモジュール。自動 OCR スキャンを実装します。 | 700.8 KB | 509.4 KB | 487 KB |
Android-AliyunFaceGuard-[version].aar | トリミング不可 | デバイスアシスタントモジュール。顔スキャンプロセス中にクライアント側の検証環境を保護します。 | 2.315 MB | 1.330 MB | 1.015 MB |
IDOCR_PubSDK_Android-1.0.0.aar | トリミング可能 | NFC サービスモジュール。 説明 eKYC 検証に NFC 機能が不要な場合は、これをトリミングできます。 | 5.2 MB | ||
idv-identitynfc-[version].intl.aar | トリミング可能 | NFC ビジネスモジュール。 説明 eKYC 検証に NFC 機能が不要な場合は、これをトリミングできます。 | 172 KB | ||