Podfile に以下の内容を追加してください:pod 'ClientAttestation', :podspec => './SDK' // 設定例です。実際のSDK podspecアドレスに置き換えてください。
pod install
AppDelegate またはアプリケーション起動時に一度実行されます。#import <TCBasCommon/TCBasCommon.h>#import <ClientAttestation/ClientAttestation.h>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// SDK初期化TCBasConfig *basConfig = [[TCBasConfig alloc] init];basConfig.baseUrl = @"www.example.com"; // 業務ドメインに設定します。basConfig.logLevel = TCBCLogLevelTypeWARN; // 任意:ログレベルを設定します。[TCBas initializeWithOptions:basConfig];return YES;}
baseUrl:お客様の EdgeOne サービスドメインです。例:www.example.com。logLevel:任意パラメータです。SDKのログ出力レベルを制御するために使用されます。選択可能な値は以下の通りです:TCBCLogLevelTypeNONE:ログを無効にします(デフォルト)。TCBCLogLevelTypeVERBOSE:verbose 以上のレベルのログを有効にします。TCBCLogLevelTypeDEBUG:debug 以上のレベルのログを有効にします。TCBCLogLevelTypeINFO:info 以上のレベルのログを有効にします。TCBCLogLevelTypeWARN:warning 以上のレベルのログを有効にします。TCBCLogLevelTypeERROR:error 以上のレベルのログを有効にします。extraDataProvider:任意パラメータです。IDFVを設定し、リスク識別能力を向上させます。#import <ClientAttestation/ClientAttestation.h>クライアント認証エンジンを起動します。[[ClientAttestation sharedInstance] start];
WKWebViewにCaptchaを表示します)、認証トークンを計算します。これは、SDKが提供するattestWithParams()メソッドによって実行されます。#import <ClientAttestation/ClientAttestation.h>// attestId// 主動的にチャレンジを開始する際にコンソールから取得します。// 受動的にチャレンジが開始された際に、httpが返すheaderフィールド内の「EO-Attest-Challenge」から取得します。NSString *attestId = @"your-attestId";AttestParams *params = [[AttestParams alloc] init];params.attestId = attestId;params.webView = self.webView; // Captcha画面の表示に使用するWebViewです。params.reqTimeoutMillis = 60000; // オプション、リクエストタイムアウト時間です。[[ClientAttestation sharedInstance] attestWithParams:paramscallback:self];// AttestCallbackDelegateプロトコルを実装します。#pragma mark - AttestCallbackDelegate- (void)onSuccess:(NSString *)token {// リスクチケットを返し、チケットをhttpリクエストのheaderフィールド「EO-Attest-Token」に配置します。}- (void)onError:(NSError *)error {// エラーメッセージのコールバック}
attestId: チャレンジIDを設定します。コンソールから取得するか、リクエスト結果から返されます。webView: オプションのパラメータで、WKWebViewインスタンスです。認証器がユーザー操作(Captchaなど)を必要とする場合、このパラメータを提供する必要があります。UI操作が不要な場合、WKWebViewは非表示にすることができます。vCodeDispType: オプションのパラメータで、インタラクティブなCaptcha UIの表示モードです。ポップアップ全画面枠で表示する場合はVCodeDispTypePopupを使用し、ページ内に埋め込んで表示する場合はVCodeDispTypeFullを使用します。デフォルト値:VCodeDispTypePopup。reqTimeoutMillis: オプションのパラメータで、リクエストタイムアウト時間を設定します。単位:ミリ秒、デフォルトは60000ミリ秒です。getAttestationToken()メソッドを呼び出すことで、現在有効な認証トークンをいつでも取得できます。attestWithParams() の呼び出しが成功するたびに、SDK は認証トークンを生成または更新します。トークンをリクエストヘッダーに付与する前に、必ず再度 getAttestationToken() を呼び出して最新のトークンを取得してください。トークンデータを使用する必要があるたびに、新しいトークンデータを再取得してください。getAttestationToken() が返すトークンデータを保存または再利用しないでください。#import <ClientAttestation/ClientAttestation.h>// クライアント認証チケットを取得します。[[ClientAttestation sharedInstance] getAttestationTokenWithCompletion:^(NSString *token) {// 例:トークンをネットワークリクエストヘッダーに追加します。// URLSession または他のネットワークライブラリを使用していると仮定します。if (token) {// リクエストオブジェクトNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://your-backend-api.com/data"]];[request setValue:token forHTTPHeaderField:@"EO-Attest-Token"];// 引き続きリクエストを送信します。}}];
#import <ClientAttestation/ClientAttestation.h>// ネットワークリクエスト処理ロジックを想定します。- (void)sendAPIRequest:(NSMutableURLRequest *)request {NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (error) {NSLog(@"ネットワークリクエストエラー: %@", error.localizedDescription);return;}NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;if (httpResponse.statusCode == 428) {// 428チャレンジを受信し、チャレンジIDを抽出します。NSString *challengeId = httpResponse.allHeaderFields[@"EO-Attest-Challenge"];if (challengeId) {NSLog(@"428チャレンジを受信しました。チャレンジID:%@", challengeId);// 認証チャレンジを実行します。AttestParams *attestParams = [[AttestParams alloc] init];attestParams.attestId = challengeId;attestParams.webView = self.webView;[[ClientAttestation sharedInstance] attestWithParams:attestParams callback:self];// 注意:ここではAttestCallbackDelegateのコールバックを処理し、onSuccessでリクエストを再送信する必要があります。} else {NSLog(@"428 レスポンスに EO-Attest-Challenge ヘッダーが見つかりません");}} else if (httpResponse.statusCode == 200) {NSLog(@"リクエスト成功!");// 業務データを処理します。} else {NSLog(@"リクエスト失敗、ステータスコード: %ld", (long)httpResponse.statusCode);// その他のエラーを処理します。}}];[task resume];}// サンプル呼び出し// NSMutableURLRequest *initialRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://your-backend-api.com/protected-data"]];// [self sendAPIRequest:initialRequest];// AttestCallbackDelegateのonSuccessメソッドでリクエストを再送信します。#pragma mark - AttestCallbackDelegate- (void)onSuccess:(NSString *)token {NSLog(@"チャレンジ成功、新しいトークンを取得しました: %@", token);// 元のリクエストを新しいトークン付きで再送信します。// ここでは以前のリクエストオブジェクトを取得し、再送信する必要があります。// 例:// NSMutableURLRequest *retryRequest = [self.lastFailedRequest mutableCopy]; // 前回失敗したリクエストを保存していることを前提とします。// [retryRequest setValue:token forHTTPHeaderField:@"EO-Attest-Token"];// [self sendAPIRequest:retryRequest];}- (void)onError:(NSError *)error {NSLog(@"認証チャレンジ失敗: %@", error.localizedDescription);}
WKWebViewを使用したインタラクティブ認証(およびJS認証)WKWebView(iOSプラットフォーム)がこれらの機能を実現するための重要なコンポーネントです。attestWithParams() メソッドを呼び出す際に WKWebView インスタンスを提供することを要求します。これは、開発者がアプリケーション内で事前に WKWebView インスタンスを割り当て、認証 API を呼び出す際にそれをパラメータとして SDK に渡す必要があることを意味します。WKWebView インスタンスを必要とします。この WKWebView インスタンスはアプリケーション内部で Captcha ページを表示するため、正しく表示されるように事前に設定する必要があります。WKWebView インスタンスを必要とし、主に暗号化による作業証明(PoW)チャレンジの実行に使用されます。このシナリオでは、WKWebView インスタンスは JavaScript 実行サンドボックスのみを提供し、UI を可視的にレンダリングする必要はありません。したがって、渡される WKWebView インスタンスは可視である必要はなく、SDK もそれを UI レンダリングに使用しません。フィードバック