Anti-Bot SDK は、iOS アプリからのすべてのリクエストに署名します。WAF は署名を検証し、ボットトラフィックがサーバーに到達する前に検出してブロックします。
前提条件
開始する前に、以下をご確認ください。
対象デバイスに iOS 9.0 以降がインストールされていること
アプリ保護が購入され、有効化されていること。詳細については、「アプリ保護を有効化する手順」をご参照ください
iOS SDK パッケージ (
AliTigerTally_IDFA.frameworkまたはAliTigerTally_NOIDFA.framework)。SDK を入手するには、チケットを送信してくださいアプリキーです。 取得するには、WAF コンソールにログインし、[保護設定] > [ウェブサイト保護] に移動し、[ボット管理] タブを開き、[アプリ保護] を有効にして、[Appkey の取得とコピー] をクリックします
各 Alibaba Cloud アカウントには 1 つの App キーがあり、WAF インスタンス内のすべてのドメイン名で共有されます。同じ App キーは、Android アプリと iOS アプリの両方で使用できます。

App キーの例:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****SDKバージョンの選択
SDK には、アプリが広告主向け識別子 (IDFA) を使用するかどうかに応じて、2 つのバージョンがあります。
| バージョン | フレームワークファイル | 使用する場合 |
|---|---|---|
| IDFA | AliTigerTally_IDFA.framework | アプリが IDFA を使用する場合 |
| Non-IDFA | AliTigerTally_NOIDFA.framework | アプリが IDFA を使用しない場合 |
仕組み
SDK は、
vmpSignを使用してリクエストボディに署名し、署名トークン (wToken) を返します。アプリは、
wTokenを HTTP リクエストヘッダーに追加し、リクエストを送信します。WAF は、すべてのインバウンドリクエストで
wTokenを解析し、悪意のあるトラフィックをブロックし、正規のリクエストをサーバーに転送します。
ログイン、決済、その他保護が必要なアクションなど、ビジネスクリティカルなイベントではリクエストに署名してください。
SDKの統合
ステップ1: Xcodeプロジェクトのセットアップ
Xcode で iOS プロジェクトを開き、SDK フレームワークをプロジェクトディレクトリにコピーします。
ステップ2: 依存ライブラリの追加
以下のライブラリをターゲットに追加します。
| ライブラリ | Non-IDFA バージョン | IDFA バージョン |
|---|---|---|
libc++.tbd | 必須 | 必須 |
CoreTelephony.framework | 必須 | 必須 |
libresolv.9.tbd | 必須 | 必須 |
AdSupport.framework | 不要 | 必須 |
ステップ3: -ObjCリンカフラグの追加
ビルド設定で、[その他のリンカーフラグ] に -ObjC を追加します。
ステップ4: SDKヘッダーのインポート
Objective-C — SDK を呼び出すソースファイルにインポート文を追加します。
// Non-IDFA バージョン
#import <AliTigerTally_NOIDFA/AliTigerTally.h>
// IDFA バージョン
#import <AliTigerTally_IDFA/AliTigerTally.h>Swift — ブリッジングヘッダーファイルを作成し、インポート文を追加します。
#ifndef TigerTally_sdk_Swift_h
#define TigerTally_sdk_Swift_h
// Non-IDFA バージョン
#import <AliTigerTally_NOIDFA/AliTigerTally.h>
// IDFA バージョン
#import <AliTigerTally_IDFA/AliTigerTally.h>
#endif /* TigerTally_sdk_Swift_h */次に、[ビルド設定] > [Objective-C ブリッジングヘッダー]でブリッジングヘッダーのパスを設定します。
ステップ5: ユーザー IDの設定 (オプション)
setAccount を呼び出して、ユーザー ID を SDK リクエストに関連付けます。これにより、よりきめ細かい WAF 保護ポリシーを構築できます。ゲストユーザーの場合は、この呼び出しをスキップして、直接 initialize に進んでください。
構文:
-(void)setAccount:(NSString*)account| パラメータ | 型 | 説明 |
|---|---|---|
account | NSString* | ユーザー ID。生の識別子ではなく、マスクされた値を使用してください。 |
Objective-C:
// マスクされたユーザー ID を使用
[[AliTigerTally sharedInstance] setAccount:@"testAccount"];Swift:
AliTigerTally.sharedInstance().setAccount("testAccount")ステップ6: SDKの初期化
App キーを使用して initialize を呼び出し、SDK を起動してデバイス情報を収集します。デバイス情報を更新する必要がある場合は、いつでも再度呼び出すことができます。
構文:
-(bool)initialize:(NSString*)appKey| パラメータ | 型 | 説明 |
|---|---|---|
appKey | NSString* | SDK 認証キー。 |
成功した場合は true、失敗した場合は false を返します。
Objective-C:
NSString *appKey = @"****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****";
if ([[AliTigerTally sharedInstance] initialize:appKey]) {
NSLog(@"初期化に成功しました。");
} else {
NSLog(@"初期化に失敗しました。");
}Swift:
let binit = AliTigerTally.sharedInstance().initialize("****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****")
if binit {
NSLog("初期化に成功しました。")
} else {
NSLog("初期化に失敗しました。")
}ステップ7: リクエストへの署名
vmpSign を呼び出して、リクエストボディの署名トークンを生成します。
構文:
-(NSString*)vmpSign:(NSData*)inputBody| パラメータ | 型 | 説明 |
|---|---|---|
inputBody | NSData* | 署名対象のリクエストボディ。 |
成功した場合は、署名文字列 (NSString*) を返します。この署名は wToken と呼ばれます。
エラー時の戻り値:
| 戻り値 | 原因 | 修正方法 |
|---|---|---|
you must call initialize | initialize が呼び出されていない | vmpSign の前に initialize を呼び出します |
you must input body | inputBody が指定されていない | vmpSign を呼び出す際にリクエストボディを渡します |
NULL | 初期化が完了していない | vmpSign を再度呼び出します |
Objective-C:
if (![[AliTigerTally sharedInstance] initialize:@"****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****"]) {
NSLog(@"初期化に失敗しました。");
return;
}
NSString *signBody = @"hello";
NSString *wToken = [[AliTigerTally sharedInstance] vmpSign:[signBody dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"wToken: %@", wToken);Swift:
if !AliTigerTally.sharedInstance().initialize("****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****") {
NSLog("初期化に失敗しました。")
return
}
let signBody = "hello"
let signData = signBody.data(using: .utf8)!
let token = AliTigerTally.sharedInstance().vmpSign(signData)!
NSLog("wToken: %@", token)ステップ8: 署名付きリクエストの送信
wToken を HTTP リクエストヘッダーに追加し、リクエストを送信します。
Objective-C:
NSURL *url = [NSURL URLWithString:@"https://xxxxxx/test?id=123"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10];
[request setValue:wToken forHTTPHeaderField:@"wToken"];
request.HTTPMethod = @"post";
request.HTTPBody = [signBody dataUsingEncoding:NSUTF8StringEncoding];
NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"リクエストに失敗しました: %@", error);
} else {
NSLog(@"リクエストを送信しました。");
}
}];
[dataTask resume];Swift:
guard let url = URL(string: "https://xxxxxx/test?id=123") else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue(token, forHTTPHeaderField: "wToken")
URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("リクエストに失敗しました: \(error)")
} else {
print("リクエストを送信しました。")
}
}.resume()(オプション) サンプルプロジェクトでのテスト
本番アプリに統合する前に、Xcode でテスト用の iOS プロジェクトを作成し、統合手順を検証します。
以下のコードは、TigerTally_sdk_test という名前のテストプロジェクトにおける、ViewController.m のサンプルです。
//
// ViewController.m
// TigerTally_sdk_test
//
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 追加のセットアップを実行...
}
@end