このトピックでは、FACE_GUARD SDK for Android を統合する方法について説明します。
開始する前に
FACE_GUARD を統合するアプリケーションには、成熟した顔認識アルゴリズムと脅威ポリシーを管理するシステムが必要です。ビジネスシナリオに適しているかどうかを評価するために、まずビジネス マネージャーに相談することをお勧めします。
Android SDK には次の制限があります。
エミュレーターモードでのデバッグはサポートされていません。
SDK は、Android 4.4 以降を実行するスマートフォンやタブレットなどのスマートモバイルデバイスにのみ統合できます。
arm、armv7、および arm64 アーキテクチャがサポートされています。
統合手順
準備
SDK を統合する前に、権限と依存関係を構成する必要があります。
権限
依存関係の構成
難読化ルールの構成 (重要)
SDK の呼び出し
準備が完了したら、次の 3 つのステップに従ってクライアントを統合します。
1. SDK の初期化 (initWithOptions)
この関数は、SDK の内部初期化を実行します。アプリケーションの起動時に、できるだけ早くこの関数を呼び出す必要があります。詳細については、「統合フロー」をご参照ください。[時点 1] で initWithOptions 初期化操作を呼び出します。
関数プロトタイプ
public void initWithOptions(Context ctx, String userProductKey, Map<String, String> options, FaceSecInitListener securityInitListener);パラメーター
ctx: 現在の Application Context または Activity Context。
userProductKey: ユーザーを識別するために Alibaba Cloud によって割り当てられたプロダクトの AppKey。これは AccessKey (AK) とは異なります。AppKey を入手するには、ビジネス マネージャーにお問い合わせください。
重要FACE_GUARD を統合するアプリケーションには、成熟した顔認識アルゴリズムと脅威ポリシーを管理するシステムが必要です。ビジネスシナリオに適しているかどうかを評価するために、まずビジネス マネージャーに相談することをお勧めします。
options: 情報収集のオプションパラメーターを指定します。このパラメーターはオプションです。オプションパラメーターは次のとおりです。
説明ID Verification クライアントには、Device Guard セキュリティモジュールが組み込まれています。さまざまなリージョンのデータ収集コンプライアンス要件を満たすために、さまざまなデータレポートサイトを提供します。ユーザー属性に基づいてレポートサイトを指定するために、CustomUrl と CustomHost を設定できます。
注: 単一のアプリケーションセッションのライフサイクル内で指定できるレポートサイトは 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
securityInitListener: 初期化のコールバックリスナー。コールバックを使用して、初期化が成功したかどうかを判断できます。デフォルト値は null です。code フィールドの有効な値の詳細については、「code の戻り値」をご参照ください。
例
public class CustomApplication extends Application { private static String USER_PRODUCT_KEY = "123e4567e89b12d3a45642661417****"; @Override public void onCreate() { super.onCreate(); Map<String, String> options = new HashMap<>(); options.put("IPv6", "0"); // IPv4 に設定します。 options.put("DataSwitch", "0"); // データ収集を初期化フェーズに設定します。 // options.put("DataType", String.valueOf(NO_EXTRA_DEVICE_DATA)); // 準拠したデータ収集を設定します。 // カスタムデータレポートリージョンを設定します。 // options.put("CustomUrl", "xxx"); // レポートサイトの URL を設定します。 // options.put("CustomHost", "xxx"); // レポートサイトのホストを設定します。 // 標準呼び出し (推奨) FaceSecDevice.getInstance().initWithOptions(this, USER_PRODUCT_KEY, options, null); // コールバック呼び出し FaceSecDevice.getInstance().initWithOptions(this, USER_PRODUCT_KEY, options, new FaceSecInitListener() { @Override public void onInitFinish(int code) { if (FaceSecCode.SC_SUCCESS != code) { Log.d("AliyunFaceGuard", "初期化に失敗しました"); } else { Log.d("AliyunFaceGuard", "初期化に成功しました"); } } }); } }
2. クライアントトークンの取得 (getDeviceToken)
クライアントトークンを取得します。詳細については、「統合フロー」をご参照ください。[時点 2] でこの操作を呼び出し、トークンをビジネスサーバーにレポートします。次に、サーバーから FACE_GUARD の FaceGuardRisk API 操作を呼び出して、クライアントからデバイスのリスク情報を取得します。
統合の詳細については、「統合プロセス」をご参照ください。initWithOptions 初期化インターフェイスは [タイミング 1] で、getDeviceToken インターフェイスは [タイミング 2] で呼び出すことができます。または、initWithOptions と getDeviceToken インターフェイスの呼び出しの間隔が少なくとも 3 秒であることを確認することもできます。
getDeviceToken 操作を呼び出すときに、bizId パラメーターを渡して、トークンを一意のビジネス認証 ID にバインドします。サーバーで結果をクエリするときも、ID を渡す必要があります。クライアントによって渡された bizId がサーバーによって渡された ID と同じであることを確認してください。これにより、トークンの改ざんを防ぐことができます。
アプリケーションのサブスレッドで getDeviceToken 操作を呼び出します。これにより、長い操作呼び出し時間による潜在的なクラッシュを防ぐことができます。
関数プロトタイプ
public SecurityToken getDeviceToken() // bizId を渡します。 public SecurityToken getDeviceToken(String bizId)パラメーター
bizId: 顧客のビジネス ID。この ID を使用して、ビジネス ID をトークンに関連付けることができます。デフォルトでは、このパラメーターを渡す必要はありません。
戻り値
FaceSecToken オブジェクト。定義は次のとおりです。
public class FaceSecToken { // 操作呼び出しの状態コード。 public int code; // サーバーで結果をクエリするために使用されるトークン文字列。 public String token; }code: 操作呼び出しの状態コード。このコードを使用して、呼び出しが成功したかどうかを判断できます。
token: トークン文字列。このトークンを使用して、ビジネス用の Alibaba Cloud FACE_GUARD API 操作を呼び出すことができます。
重要token 文字列は、良好なネットワーク環境では約 600 バイトの長さです。ネットワーク環境が悪い場合、返される文字列は約 2.5 KB の長さで、特別な識別子があります。
良好なネットワーク接続: "U0dfTkxxxx"
悪いネットワーク接続: "U0dfUFxxxx"
ビジネスで多くの長いトークンが生成される場合:
例
new Thread() { @Override public void run() { // deviceToken が改ざんされるのを防ぐために bizId を渡します。 String bizId = "1234567890abcdef1234567890ab****"; FaceSecToken deviceToken = FaceSecDevice.getInstance().getDeviceToken(bizId); if(null != deviceToken){ if(FaceSecCode.SC_SUCCESS == deviceToken.code){ Log.d("AliyunFace", "token: " + deviceToken.token); } else { Log.e("AliyunFace", "getDeviceToken error, code: " + deviceToken.code); } } else { Log.e("AliyunFace", "getDeviceToken is null."); } } }.start();
3. トークンを使用してサーバーにリクエストを送信する
deviceToken (FaceSecToken.token) を取得した後、このパラメーターをビジネスサーバーへのリクエストに含めます。サーバーは結果をクエリして検証します。詳細については、「サーバー側の API 操作」をご参照ください。
完全なコード例
import face.security.device.api.FaceSecDevice;
import face.security.device.api.FaceSecInitListener;
import face.security.device.api.FaceSecToken;
import face.security.device.api.FaceSecCode;
public class MainActivity extends AppCompatActivity {
private static String USER_PRODUCT_KEY = "<キーを取得するには、ビジネス マネージャーにお問い合わせください>";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
doStantard();
}
private void doStantard() {
// SDK を初期化します。
// アプリのライフサイクルで一度だけこれを呼び出します。
// 統合フローの時点 1 で initWithOptions 操作を呼び出します。
doInit();
// ここでの 3 秒間の待機は、顔認識プロセスをシミュレートするだけです。
// try {
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// 統合フローの時点 2 で getDeviceToken 操作を呼び出します。
new Thread() {
@Override
public void run() {
// トークンを取得します。
doGetToken();
}
}.start();
}
private void doInit() {
Map<String, String> options = new HashMap<>();
options.put("IPv6", "0"); // IPv4 に設定します。
options.put("DataSwitch", "0"); // データ収集を初期化フェーズに設定します。
// options.put("DataType", String.valueOf(NO_EXTRA_DEVICE_DATA)); // 準拠したデータ収集を設定します。
// カスタムデータレポートリージョンを設定します。
// options.put("CustomUrl", "xxx"); // レポートサイトの URL を設定します。
// options.put("CustomHost", "xxx"); // レポートサイトのホストを設定します。
FaceSecDevice.getInstance().initWithOptions(this, USER_PRODUCT_KEY, options, null);
}
private void doGetToken() {
// deviceToken が改ざんされるのを防ぐために bizId を渡します。
String bizId = "1234567890abcdef1234567890ab****";
FaceSecToken deviceToken = FaceSecDevice.getInstance().getDeviceToken(bizId);
if(null == deviceToken || FaceSecCode.SC_SUCCESS != deviceToken.code){
Log.e("AliyunFaceGuard", "トークンの取得に失敗しました。コード: " + deviceToken.code);
} else {
Log.d("AliyunFaceGuard", "トークンが取得されました。トークン: " + deviceToken.token);
}
}
}