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

Web Application Firewall:iOSアプリへのAnti-Bot SDKの統合

最終更新日:Sep 12, 2026

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 Protection

App キーの例:

****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****

SDKバージョンの選択

SDK には、アプリが広告主向け識別子 (IDFA) を使用するかどうかに応じて、2 つのバージョンがあります。

バージョンフレームワークファイル使用する場合
IDFAAliTigerTally_IDFA.frameworkアプリが IDFA を使用する場合
Non-IDFAAliTigerTally_NOIDFA.frameworkアプリが IDFA を使用しない場合

仕組み

  1. SDK は、vmpSign を使用してリクエストボディに署名し、署名トークン (wToken) を返します。

  2. アプリは、wToken を HTTP リクエストヘッダーに追加し、リクエストを送信します。

  3. 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
パラメータ説明
accountNSString*ユーザー ID。生の識別子ではなく、マスクされた値を使用してください。

Objective-C:

// マスクされたユーザー ID を使用
[[AliTigerTally sharedInstance] setAccount:@"testAccount"];

Swift:

AliTigerTally.sharedInstance().setAccount("testAccount")

ステップ6: SDKの初期化

App キーを使用して initialize を呼び出し、SDK を起動してデバイス情報を収集します。デバイス情報を更新する必要がある場合は、いつでも再度呼び出すことができます。

構文:

-(bool)initialize:(NSString*)appKey
パラメータ説明
appKeyNSString*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
パラメータ説明
inputBodyNSData*署名対象のリクエストボディ。

成功した場合は、署名文字列 (NSString*) を返します。この署名は wToken と呼ばれます。

エラー時の戻り値:

戻り値原因修正方法
you must call initializeinitialize が呼び出されていないvmpSign の前に initialize を呼び出します
you must input bodyinputBody が指定されていない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