ID Verification は、ビジネス アプリケーション (App) に電子的な顧客確認 (eKYC) のリモート本人確認を実装するための Android クライアント SDK を提供します。サーバー側の初期化 API を呼び出して、一意のトランザクション ID を取得できます。次に、このトランザクション ID を使用してクライアント SDK を起動します。このトピックでは、サンプルコードを含む Android クライアントの統合プロセスについて説明します。
制限
対応システム: Android 4.3 以降の携帯電話またはタブレット。
非対応: x86 アーキテクチャのデバイス。
権限
セキュリティを強化するため、現在の SDK では以下の権限が必要です:
権限 | 必須 | 説明 |
android.permission.INTERNET | はい | インターネット権限。Android SDK が動作するにはインターネット接続が必要です。 |
android.permission.ACCESS_NETWORK_STATE | いいえ (推奨) | |
android.permission.CAMERA | はい | カメラ権限。この権限は Android 6.0 以降では動的です。 |
android.permission.WRITE_EXTERNAL_STORAGE | いいえ |
|
SDK のダウンロードと設定
Android SDK は標準の AAR パッケージとして提供されています。SDK リリースノートからダウンロードしてください。機能を試すには、Android デモもダウンロードできます。
ダウンロード後、パッケージを解凍します。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/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-identitymouth-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 を使用して 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.2.83_noneautotype' }説明上記の依存関係では、xxx は SDK の具体的なバージョン番号を示します。
サードパーティー依存ライブラリを省略しないでください。省略すると、SDK が正しく動作しない場合があります。
tigerservice-xxx.aar コンポーネントは、バージョン 1.3.4 以降で削除されています。
バージョン 1.3.6 以降では、idv-identitymouth-sdk-xxx.aar コンポーネントが新たに追加されました。
API リファレンス
Android SDK には、インストール、getMetaInfo、ベリファイ の API オペレーションが含まれています。
SDK の初期化 (インストール)
関数プロトタイプ
public void install(Context context); public void install(Context context,Map<String, String> options);パラメーター
context:現在のアプリケーションのコンテキスト。
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 ドメイン名を使用するかどうかを示します:
0 (デフォルト):いいえ (IPv4 ドメイン名を使用)
1:はい (IPv6 ドメイン名を使用)
"1"
DataSwitch
デバイス情報をいつ報告するかを制御します:
0 (デフォルト):SDK の初期化時
1:トークン取得時
説明デフォルト設定を推奨します。
"1"
CustomUrl
データ報告用のサーバードメイン名を設定します。
「各リージョンの CustomUrl」をご参照ください。
CustomHost
データ報告用のサーバーホストを設定します。
"cloudauth-device.ap-southeast-1.aliyuncs.com"
説明この例はシンガポールリージョン用です。他のリージョンのサーバーホストについては、「各リージョンの CustomUrl」をご参照ください。
戻り値:なし。
メタ情報の取得 (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 を渡し、初期化 API を通じて トランザクション ID を取得していることを確認してください。
新しいバージョンでは、戻り値に プロトコル フィールドが追加されます。拡張パラメーター extParams を通じて、新しい プロトコル を渡してください。
関数プロトタイプ
public void verify(String transactionId, Map<String, String> extParams, IdentityCallback callback);パラメーター
名前
型
説明
transactionId
String
サーバー側の 初期化 API から取得した transactionId です。
重要各 transactionId は、verify 関数を一度しか呼び出せません。 verify 関数を呼び出す前に、毎回新しい 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.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 インタラクションが減り、ネットワークエクスペリエンスが向上します。
なし
IdentityResponse.code テーブル
ステータスコード
課金
subCode
説明
1000
はい
A1000_1
ユーザーは顔スキャンプロセスを完了しました。推奨される検証結果は「成功」です。この結果は参考用です。サーバー側の CheckResult API を呼び出して最終的な検証結果を取得し、処理を続行してください。
1001
はい
A1001_1
ユーザーは顔スキャンプロセスを完了しました。推奨される検証結果は「失敗」です。この結果は参考用です。サーバー側の CheckResult API を呼び出して最終的な検証結果と詳細な失敗理由を取得し、処理を続行してください。
1002
いいえ
A1002_1
モデルの読み込みに失敗しました。
A1002_2
アプリがバックグラウンドに移動しました (ホームボタンが押されました)。アプリがフォアグラウンドに戻った際、SDK は自動的に終了しました。
A1002_3
SO ライブラリの読み込みに失敗しました。
1003
いいえ
A1003_1
初期化 API のコンテンツが空です。
A1003_2
初期化 API のコンテンツ形式が正しくありません。
A1003_3
初期化 API プロトコル接続に失敗しました。
A1003_4
初期化 API コンテンツの復号に失敗しました。
A1003_5
初期化 API に失敗しました (コードが 200 ではありません、または BizCode が CODE_INIT_SUCCESS ではありません)。
A1003_6
初期化 API OSS が空です。
A1003_7
空のコンテキストが渡されました。
A1003_8
空のプロトコル例外が渡されました。
1004
いいえ
A1004_1
フロントカメラが異常です。
A1004_2
カメラの起動に失敗しました。
A1004_3
リアカメラが異常です。
1005
いいえ
A1005_1
初期化 API ネットワークが異常です。
A1005_2
検証 API ネットワークが異常です。
1006
いいえ
A1006_1
ユーザーが終了しました。
1007
いいえ
A1007_1
無効な transactionId です。
1008
いいえ
A1008_1
NFC モジュールがありません。
A1008_2
OCR モジュールがありません。
A1008_3
顔モジュールがありません。
1009
いいえ
クライアントのタイムスタンプエラーです。
1010
いいえ
A1010_1
verify を呼び出す前に install メソッドが呼び出されていません。
1011
いいえ
不正なドキュメントタイプが送信されました。
1012
いいえ
A1012_1
キーとなるドキュメント情報が欠落しているか、形式の検証に失敗しました。
1013
いいえ
画質が低いです。
1014
いいえ
A1014_1
最大リトライ回数を超えました。
1015
いいえ
A1015_1
Android システムのバージョンが低すぎます。
1016
いいえ
A1016_1
カメラ権限が取得されていません。
1017
いいえ
A1017_1
パラメーター例外:productCode が空です。
2000
いいえ
A2000_1
NFC 設定に失敗しました。
A2000_2
NFC 権限が有効になっていません。
2002
いいえ
A2002_1
デバイスは NFC をサポートしていません。
サンプルコード
public class MainActivity extends AppCompatActivity {
private String transactionId = "";
private String protocol = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// SDK を初期化します
IdentityPlatform.getInstance().install(MainActivity.this);
// メタ情報を取得します
String metaInfo = IdentityPlatform.getMetaInfo(MainActivity.this);
/**
* メタ情報をアプリサーバーに送信します。クラウド側の初期化 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.idv.identity.mouth.MouthRouter {*;}
-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(...);
}
# 1.3.2 より前のバージョンを使用する場合は、以下の難読化ルールを追加してください。
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.alibaba.fastjson.** { *; }
-keep class * extends com.alibaba.fastjson.TypeReference { *; }コンポーネントのトリミング
トリミング可否 | モジュール名 | モジュールの説明 | トリミング後の影響 | コンパイル後のサイズ | ||
デュアルアーキテクチャ | ARM64 | ARMv7 | ||||
トリミング不可 | idv-identitybase-sdk-[version].aar | 基本モジュール。 | トリミング不可 | 0.1 MB | ||
トリミング不可 | idv-identityplatform-[version].aar | 基本モジュール。 | トリミング不可 | 0.13 MB | ||
トリミング不可 | idv-identitycrypto-[version].aar | 基本モジュール。 | トリミング不可 | 0.44 MB | 0.25 MB | 0.19 MB |
トリミング可能 | idv-identityface-[version].aar | 顔認識の基本 UI モジュール。 | トリミング後は顔の生体検知が使用できなくなります。 | 0.05 MB | ||
トリミング可能 | tygerservice-[version].aar | 顔認識の基本モジュール。 説明 このコンポーネントはバージョン 1.3.4 以降で削除されています。 | トリミング後は顔の生体検知が使用できなくなります。 | 2.6 MB | 1.67 MB | 1.4 MB |
トリミング可能 | idv-identitymnn-[version].aar | MNN モジュールは、顔の生体検知、顔の品質、および OCR 自動スキャンの基本コンポーネントです。このモジュールをトリミングすると、これらの機能は使用できなくなります。 | このモジュールをトリミングすると、顔の生体検知、顔の品質、および OCR 自動スキャン機能は使用できなくなります。 | 2.2 MB | 1.2 MB | 1.04 MB |
トリミング可能 | idv-identityservice-sdk-[version].aar | 顔の生体検知モジュール。 | トリミング後は顔の生体検知が使用できなくなります。 | 0.8 MB | 0.59 MB | 0.54 MB |
トリミング可能 | idv-identityblink-sdk-[version].intl.aar | 顔の生体検知 (まばたき検出) モジュール。 | トリミング後は、まばたきによる顔の生体検知が使用できなくなります。 | 0.2 MB | ||
トリミング可能 | idv-identitymouth-sdk-[version].aar | 口の動き検出モジュール。 | トリミング後は、口の動き検出機能が使用できなくなります。 | 1.2 MB | ||
トリミング可能 | idv-identityquality-sdk-[version].aar | 厳格な顔品質検出モジュール。サーバー側でこの機能を任意で有効化できます。この機能が不要な場合は、トリミングできます。 | トリミング後は、顔の品質とオクルージョン判定が無効になります。 | 0.2 MB | ||
トリミング可能 | idv-identityocr-[version].aar | OCR モジュール。eKYC 検証を使用する場合、このモジュールはトリミングしないでください。 | トリミング後は OCR および eKYC 検証機能が使用できなくなります。 | 0.23 MB | ||
トリミング可能 | idv-identityocrservice-[version].aar | OCR サービス モジュール。OCR 自動スキャンを有効化します。 | トリミング後は OCR 自動スキャンが使用できなくなります。 | 0.61 MB | 0.47 MB | 0.42 MB |
トリミング可能 | Android-AliyunFaceGuard-[version].aar | デバイスアシスタント モジュール。顔スキャン中のクライアント側の検証環境を保護します。 | このモジュールは、顔スキャン中のクライアント側の検証環境を保護します。トリミングするとセキュリティが低下します。保持することを推奨します。 | 3.3 MB | 2.8 MB | 2 MB |
トリミング可能 | IDOCR_PubSDK_Android-1.0.0.aar | NFC サービス モジュール。 説明 eKYC 検証で NFC が不要な場合は、このモジュールをトリミングできます。 | トリミング後は NFC 機能が使用できなくなります。 | 5.2 MB | ||
トリミング可能 | idv-identitynfc-[version].intl.aar | NFC ビジネス モジュール。 説明 eKYC 検証で NFC が不要な場合は、このモジュールをトリミングできます。 | トリミング後は NFC 機能が使用できなくなります。 | 0.14 MB | ||