すべてのプロダクト
Search
ドキュメントセンター

ID Verification:iOS 統合

最終更新日:Nov 09, 2025

このトピックでは、FACE_GUARD の iOS 統合プロセスについて説明します。

前提条件

重要

FACE_GUARD を統合するアプリケーションには、成熟した顔認識アルゴリズムと脅威ポリシーを管理するためのシステムが必要です。まず、ビジネス担当者に相談して、これがビジネスシナリオに適しているかどうかを評価することをお勧めします。

iOS SDK には次の制限があります。

  • エミュレーターモードでのデバッグはサポートされていません。

  • iOS 9.0 以降が必要です。

  • Apple のプライバシーポリシーによると、Identifier for Advertisers (IDFA) を使用する場合は、plist ファイルで使用方法を宣言し、ユーザーの権限付与をリクエストする必要があります。したがって、開発環境は Xcode 12 以降である必要があります。

統合手順

依存関係の構成

  1. iOS ソフトウェア開発キット (SDK) をダウンロードします。SDK を入手するには、ビジネス担当者にお問い合わせください。SDK は Xcode 用の標準的な静的フレームワークパッケージです。

    説明
    • 単一アーキテクチャの SO ファイルは約 2 MB です。

    • FACE_GUARD SDK には、リバースエンジニアリングへの耐性と安全なデータ送信を確保するために、広範なコードの難読化、インフレーション、暗号化/復号操作が含まれています。これらの操作により、SDK パッケージのサイズが大きくなります。

  2. SDK パッケージから faceguard.framework ファイルを iOS プロジェクトフォルダにコピーします。

  3. プロジェクト設定で、[Build Phases] > [Link Binary With Libraries] に移動し、faceguard.framework とその依存パッケージを追加します。

    CoreTelephony.framework
    Security.framework
    libresolv.tbd
    libc++.tbd
    libz.tbd
    faceguard.framework

    image.png

SDK の呼び出し

準備が完了したら、次の 3 つのステップに従ってクライアントを統合します。

重要

Apple のプライバシーポリシーでは、IDFA を使用する場合、plist ファイルで使用方法を宣言し、ユーザーの権限付与をリクエストする必要があります。したがって、開発環境は Xcode 12 以降である必要があります。

  1. 初期化 (initFG)

  2. クライアントトークンの取得 (getDeviceToken)

  3. トークンを使用してサーバーにリクエストを送信

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_GUARDFaceGuardRisk インターフェイスをクエリして、クライアントデバイスの不正検出情報を取得します。

重要
  • 統合の詳細については、「統合プロセス」をご参照ください。initFG インターフェイスを [ タイミング 1 ] で、getDeviceToken インターフェイスを [ タイミング 2 ] で呼び出します。または、initFGgetDeviceToken インターフェイスの呼び出しの間隔が 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;
      @end
    • code: API 呼び出しの状態コード。これを使用して、呼び出しが成功したかどうかを判断できます。

      コードの戻り値

      FaceSecCode

      コード

      注釈

      SC_SUCCESS

      10000

      SDK は正常に初期化されました。

      SC_NOT_INIT

      10001

      SDK は初期化されていません。

      SC_NOT_PERMISSION

      10002

      SDK に必要な基本権限が完全に付与されていません。

      SC_UNKNOWN_ERROR

      10003

      不明なシステムエラー。

      SC_NETWORK_ERROR

      10004

      ネットワークエラー。

      SC_NETWORK_ERROR_EMPTY

      10005

      ネットワークエラー。返されたコンテンツは空の文字列です。

      SC_NETWORK_ERROR_INVALID

      10006

      ネットワーク応答のフォーマットが無効です。

      SC_PARSE_SRV_CFG_ERROR

      10007

      サーバー構成の解析に失敗しました。

      SC_NETWORK_RET_CODE_ERROR

      10008

      ゲートウェイが失敗を返しました。

      SC_APPKEY_EMPTY

      10009

      AppKey が指定されていません。

      SC_PARAMS_ERROR

      10010

      その他のパラメーターエラー。

      SC_FGKEY_ERROR

      10011

      キー計算エラー。

      SC_APPKEY_ERROR

      10012

      ProductKey が無効です。

    • token: トークン文字列。後続のビジネスコールで Alibaba Cloud FACE_GUARD API 操作に使用できます。

      重要

      token 文字列は、良好なネットワーク環境では約 600 バイト、劣悪なネットワーク環境では約 2.5 KB の長さです。また、特別な識別子があります:

      • 良好なネットワーク: "U0dfTkxxxx"

      • 劣悪なネットワーク: "U0dfUFxxxx"

      ビジネスで多数の長いトークンが発生した場合:

      • まず、クライアントが安定したネットワーク接続を持っていることを確認してください。

      • 次に、「アクセスフロー」の指示に従ってください。initFG インターフェイスを[ タイミング 1 ] で、getDeviceToken インターフェイスを[ タイミング 2 ] で呼び出します。または、SDK の initFGgetDeviceToken インターフェイスの呼び出しの間隔が 3 秒以上であることを確認してください。

  • 呼び出し例

    // 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