このトピックでは、FACE_GUARD の iOS 統合プロセスについて説明します。
前提条件
FACE_GUARD を統合するアプリケーションには、成熟した顔認識アルゴリズムと脅威ポリシーを管理するためのシステムが必要です。まず、ビジネス担当者に相談して、これがビジネスシナリオに適しているかどうかを評価することをお勧めします。
iOS SDK には次の制限があります。
エミュレーターモードでのデバッグはサポートされていません。
iOS 9.0 以降が必要です。
Apple のプライバシーポリシーによると、Identifier for Advertisers (IDFA) を使用する場合は、
plistファイルで使用方法を宣言し、ユーザーの権限付与をリクエストする必要があります。したがって、開発環境は Xcode 12 以降である必要があります。
統合手順
依存関係の構成
iOS ソフトウェア開発キット (SDK) をダウンロードします。SDK を入手するには、ビジネス担当者にお問い合わせください。SDK は Xcode 用の標準的な静的フレームワークパッケージです。
説明単一アーキテクチャの SO ファイルは約 2 MB です。
FACE_GUARD SDK には、リバースエンジニアリングへの耐性と安全なデータ送信を確保するために、広範なコードの難読化、インフレーション、暗号化/復号操作が含まれています。これらの操作により、SDK パッケージのサイズが大きくなります。
SDK パッケージから faceguard.framework ファイルを iOS プロジェクトフォルダにコピーします。
プロジェクト設定で、[Build Phases] > [Link Binary With Libraries] に移動し、faceguard.framework とその依存パッケージを追加します。
CoreTelephony.framework Security.framework libresolv.tbd libc++.tbd libz.tbd faceguard.framework
SDK の呼び出し
準備が完了したら、次の 3 つのステップに従ってクライアントを統合します。
Apple のプライバシーポリシーでは、IDFA を使用する場合、plist ファイルで使用方法を宣言し、ユーザーの権限付与をリクエストする必要があります。したがって、開発環境は Xcode 12 以降である必要があります。
1. 初期化 (initFG)
SDK を内部で初期化するには、アプリケーションの起動時にできるだけ早くこの関数を呼び出す必要があります。詳細については、「統合フロー」をご参照ください。[ タイミング 1 ] で initFG インターフェイスを呼び出します。
関数プロトタイプ
@interface FaceGuardDevice : NSObject /** * FACE_GUARD 初期化関数 */ - (void)initFG:(NSString *)userProductKey withOptions:(NSMutableDictionary *)options callback:(void (^)(int))initCallback; // ... @endパラメーター
userProductKey: ユーザーを識別します。これは Alibaba Cloud によって割り当てられた ProductKey であり、AccessKey (AK) とは異なります。ProductKey を入手するには、ビジネス担当者にお問い合わせください。
重要FACE_GUARD を統合するアプリケーションには、成熟した顔認識アルゴリズムと脅威ポリシーを管理するためのシステムが必要です。まず、ビジネス担当者に相談して、これがビジネスシナリオに適しているかどうかを評価することをお勧めします。
options: データ収集のためのオプションのパラメーター。デフォルト値は nil です。次のパラメーターが使用可能です。
説明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
initCallback: 初期化コールバックのリスナー。このコールバックを使用して、初期化が成功したかどうかを判断できます。デフォルト値は nil です。
codeフィールドの値の範囲については、「コードの戻り値」をご参照ください。
呼び出し例
NSMutableDictionary *options = [[NSMutableDictionary alloc] init]; [options setValue:@"0" forKey:@"IPv6"]; // IPv4 に設定 [options setValue:@"0" forKey:@"DataSwitch"]; // データ収集を初期化フェーズに設定 // カスタムデータレポートリージョンを設定 // [options setValue:@"xxx" forKey:@"CustomUrl"]; // レポートサイトの URL を設定 // [options setValue:@"xxx" forKey:@"CustomHost"]; // レポートサイトのホストを設定 // 標準呼び出し (推奨) [[FaceGuardDevice sharedInstance] initFG:@"******" withOptions:options callback:nil]; // コールバック呼び出し [[FaceGuardDevice sharedInstance] initFG:@"******" withOptions:options callback:^(int code) { NSString * initResult = [NSString stringWithFormat: @ "デバイスアシスタントの初期化結果: %d", code]; NSLog(@ "%@", initResult); if (SC_SUCCESS != code) { NSLog(@ "初期化に失敗しました"); } else { NSLog(@ "初期化に成功しました"); } }];
2. クライアント token の取得 (getDeviceToken)
クライアントトークンを取得するには、「統合フロー」をご参照ください。[ タイミング 2 ] で呼び出しを行い、トークンをビジネスサーバーにレポートします。次に、サーバーから FACE_GUARD の FaceGuardRisk インターフェイスをクエリして、クライアントデバイスの不正検出情報を取得します。
統合の詳細については、「統合プロセス」をご参照ください。initFG インターフェイスを [ タイミング 1 ] で、getDeviceToken インターフェイスを [ タイミング 2 ] で呼び出します。または、initFG と getDeviceToken インターフェイスの呼び出しの間隔が 3 秒以上であることを確認してください。
getDeviceToken を呼び出すときに、bizId を渡して、トークンを一意のビジネス認証 ID にバインドします。その後、サーバーで結果をクエリするときにこの ID を渡して、トークンが改ざんされていないことを確認できます。
時間のかかる API 呼び出しによる潜在的なクラッシュを避けるために、アプリケーションのサブスレッドで getDeviceToken API 操作を呼び出します。
関数プロトタイプ
@interface FaceGuardDevice : NSObject - (FaceGuardToken *) getDeviceToken; // bizId を渡すことをお勧めします。 - (FaceGuardToken *) getDeviceToken:(NSString *)bizId; @endパラメーター
bizId: 顧客のビジネス ID。このパラメーターは、ビジネス ID をトークンに関連付けます。デフォルトでは、このパラメーターを空のままにすることができます。
戻り値
`FaceGuardToken` 型。定義は次のとおりです:
@interface FaceGuardToken: NSObject /** * get token 操作の結果 */ @property(atomic) int code; /** * トークンの結果を含む文字列 */ @property(copy, atomic) NSString * token; @endcode: API 呼び出しの状態コード。これを使用して、呼び出しが成功したかどうかを判断できます。
token: トークン文字列。後続のビジネスコールで Alibaba Cloud FACE_GUARD API 操作に使用できます。
重要token 文字列は、良好なネットワーク環境では約 600 バイト、劣悪なネットワーク環境では約 2.5 KB の長さです。また、特別な識別子があります:
良好なネットワーク: "U0dfTkxxxx"
劣悪なネットワーク: "U0dfUFxxxx"
ビジネスで多数の長いトークンが発生した場合:
呼び出し例
// deviceToken の改ざんを防ぐために bizId を渡します。これは推奨されます。 NSString *bizId = @"1234567890abcdef******"; FaceGuardToken *deviceToken = [[FaceGuardDevice sharedInstance] getDeviceToken:bizId]; if (deviceToken == nil || SC_SUCCESS != deviceToken.code) { NSLog(@"トークンの取得に失敗しました。呼び出し結果を使用してリスクタグをクエリすることはできません。"); } else { NSLog(@"トークンを正常に取得しました。これでリスクタグをクエリできます。トークン: %@", deviceToken.token); }
3. トークンを使用してサーバーにリクエストを送信
deviceToken (FaceGuardDevice.token) を正常に取得した後、このパラメーターをサーバーへのリクエストに含めることができます。その後、サーバーは結果をクエリして検証します。詳細については、「サーバー側の API 操作」をご参照ください。
完全なコードサンプル
#import "ViewController.h"
#import <faceguard/faceguard.h>
@implementation ViewController
static NSString *USER_PRODUCT_KEY = @"<ビジネス担当者に連絡して入手してください>";
- (void)viewDidLoad {
[super viewDidLoad];
// 統合サンプル
[self doStandard];
}
- (void)doStandard {
// SDK を初期化
// アプリのライフサイクル中に一度だけ呼び出します
// 統合フローの時点 1 で initFG API 操作を呼び出します。
[self doInit];
dispatch_async(dispatch_get_global_queue(NULL, NULL), ^{
// 統合フローの時点 2 で getDeviceToken API 操作を呼び出します。
// ここでの 2 秒間の待機は、顔認識プロセスをシミュレートするだけです。
// [NSThread sleepForTimeInterval:2.0];
// トークンを取得
[self doGetToken];
});
}
- (void)doInit {
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
[options setValue:@"0" forKey:@"IPv6"]; // IPv4 に設定
[options setValue:@"0" forKey:@"DataSwitch"]; // デバイス情報の収集とレポートのタイミングを設定
// カスタムレポートリージョンを設定
// [options setValue:@"xxx" forKey:@"CustomUrl"];
// [options setValue:@"xxx" forKey:@"CustomHost"];
[[FaceGuardDevice sharedInstance] initFG:USER_PRODUCT_KEY withOptions:options callback:nil];
}
- (void)doGetToken {
// deviceToken の改ざんを防ぐために bizId を渡します。これは推奨されます。
NSString *bizId = @"1234567890abcdef******";
FaceGuardToken *deviceToken = [[FaceGuardDevice sharedInstance] getDeviceToken:bizId];
if (deviceToken == nil || SC_SUCCESS != deviceToken.code) {
NSLog(@"トークンの取得に失敗しました。呼び出し結果を使用してリスクタグをクエリすることはできません。");
} else {
NSLog(@"トークンを正常に取得しました。これでリスクタグをクエリできます。トークン: %@", deviceToken.token);
}
}
@end