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

アプリキーの例:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****SDK バージョンの選択
SDK には、ご利用のアプリが広告識別子 (IDFA) を使用するかどうかに応じて、2 つのバージョンがあります。
| バージョン | フレームワークファイル | 使用条件 |
|---|---|---|
| IDFA | AliTigerTally_IDFA.framework | ご利用のアプリが IDFA を使用する場合 |
| 非 IDFA | AliTigerTally_NOIDFA.framework | お使いのアプリは IDFA を使用していません |
仕組み
SDK は
vmpSignを使用してリクエストボディに署名し、署名トークン (wToken) を返します。ご利用のアプリは
wTokenを HTTP リクエストヘッダーにアタッチし、リクエストを送信します。WAF はすべてのインバウンドリクエストで
wTokenを解析し、悪意のあるトラフィックをブロックし、正当なリクエストをサーバーに転送します。
ログイン、支払い送信、または保護が必要な操作など、ビジネス上重要なイベントでリクエストに署名します。
SDK の統合
ステップ 1: Xcode プロジェクトのセットアップ
Xcode でご利用の iOS プロジェクトを開き、SDK フレームワークをプロジェクトディレクトリにコピーします。
ステップ 2: 依存ライブラリの追加
ターゲットに以下のライブラリを追加します。
| ライブラリ | 非 IDFA バージョン | IDFA バージョン |
|---|---|---|
libc++.tbd | 必須 | 必須 |
CoreTelephony.framework | 必須 | 必須 |
libresolv.9.tbd | 必須 | 必須 |
AdSupport.framework | 不要 | 必須 |
ステップ 3: -ObjC リンカーフラグの追加
「ビルド設定」で、-ObjC を「その他のリンカーフラグ」に追加します。
ステップ 4: SDK ヘッダーのインポート
Objective-C — SDK を呼び出す任意のソースファイルにインポートを追加します。
// Non-IDFA version
#import <AliTigerTally_NOIDFA/AliTigerTally.h>
// IDFA version
#import <AliTigerTally_IDFA/AliTigerTally.h>Swift — ブリッジングヘッダーファイルを作成し、インポートを追加します。
#ifndef TigerTally_sdk_Swift_h
#define TigerTally_sdk_Swift_h
// Non-IDFA version
#import <AliTigerTally_NOIDFA/AliTigerTally.h>
// IDFA version
#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:
// Use a masked user ID
[[AliTigerTally sharedInstance] setAccount:@"testAccount"];Swift:
AliTigerTally.sharedInstance().setAccount("testAccount")ステップ 6: SDK の初期化
アプリキーを指定して 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(@"Initialization successful.");
} else {
NSLog(@"Initialization failed.");
}Swift:
let binit = AliTigerTally.sharedInstance().initialize("****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****")
if binit {
NSLog("Initialization successful.")
} else {
NSLog("Initialization failed.")
}ステップ 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(@"Initialization failed.");
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("Initialization failed.")
return
}
let signBody = "hello"
let token = AliTigerTally.sharedInstance().vmpSign(signData)
NSLog(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(@"Request failed: %@", error);
} else {
NSLog(@"Request sent.");
}
}];
[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("Request failed: \(error)")
} else {
print("Request sent.")
}
}.resume()(オプション) サンプルプロジェクトでのテスト
本番アプリに統合する前に、Xcode でテスト iOS プロジェクトを作成して統合手順を確認します。
次の図は、TigerTally_sdk_test という名前のサンプルテストプロジェクトを示しています。
