Todos os produtos
Search
Central de documentação

Web Application Firewall:Integrar o Anti-Bot SDK em aplicativos iOS

Última atualização: Sep 11, 2026

O Anti-Bot SDK assina cada requisição do seu aplicativo iOS. O WAF verifica essa assinatura para detectar e bloquear tráfego de bots antes que ele chegue ao servidor.

Pré-requisitos

Antes de começar, verifique se você tem:

  • iOS 9.0 ou posterior nos dispositivos de destino

  • App Protection adquirido e ativado. Consulte Procedure to enable App Protection

  • Pacote do SDK para iOS (AliTigerTally_IDFA.framework ou AliTigerTally_NOIDFA.framework). Envie um ticket para obter o SDK

  • Sua app key. Para obtê-la, faça login no console do WAF, acesse Protection Configurations > Website Protection, abra a aba Bot Management, ative App Protection e clique em Obtain and Copy Appkey

Cada conta Alibaba Cloud tem uma única app key, compartilhada entre todos os nomes de domínio da instância do WAF. A mesma app key funciona tanto para aplicativos Android quanto iOS.

App Protection

Exemplo de app key:

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

Escolher uma versão do SDK

O SDK está disponível em duas versões, conforme o uso do Identifier for Advertisers (IDFA) pelo aplicativo:

Versão

Arquivo do framework

Quando usar

IDFA

AliTigerTally_IDFA.framework

O aplicativo usa IDFA

Non-IDFA

AliTigerTally_NOIDFA.framework

O aplicativo não usa IDFA

Como funciona

  1. O SDK assina o corpo da requisição com vmpSign e retorna um token de assinatura (wToken).

  2. O aplicativo anexa o wToken ao cabeçalho da requisição HTTP e a envia.

  3. O WAF analisa o wToken em cada requisição recebida, bloqueia o tráfego malicioso e encaminha as legítimas ao servidor.

Assine requisições em eventos críticos para o negócio, como login, envio de pagamento ou qualquer ação que exija proteção.

Integrar o SDK

Etapa 1: Configurar o projeto no Xcode

Abra o projeto iOS no Xcode e copie o framework do SDK para o diretório do projeto.

Etapa 2: Adicionar bibliotecas de dependência

Adicione as seguintes bibliotecas ao target:

Biblioteca

Versão Non-IDFA

Versão IDFA

libc++.tbd

Obrigatória

Obrigatória

CoreTelephony.framework

Obrigatória

Obrigatória

libresolv.9.tbd

Obrigatória

Obrigatória

AdSupport.framework

Não obrigatória

Obrigatória

Etapa 3: Adicionar a flag de linker -ObjC

Em Build Settings, adicione -ObjC em Other Linker Flags.

Etapa 4: Importar o header do SDK

Objective-C — adicione o import em qualquer arquivo source que chame o SDK:

// Non-IDFA version
#import <AliTigerTally_NOIDFA/AliTigerTally.h>

// IDFA version
#import <AliTigerTally_IDFA/AliTigerTally.h>

Swift — crie um arquivo de bridging header e adicione o import:

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

Em seguida, defina o caminho do bridging header em Build Settings > Objective-C Bridging Header.

Etapa 5: Definir um user ID (opcional)

Chame setAccount para associar um user ID às requisições do SDK. Isso permite criar políticas de proteção do WAF mais granulares. Para usuários convidados, ignore esta chamada e vá diretamente para initialize.

Sintaxe:

-(void)setAccount:(NSString*)account

Parâmetro

Tipo

Descrição

account

NSString*

User ID. Utilize um valor mascarado em vez de um identificador direto.

Objective-C:

// Use a masked user ID
[[AliTigerTally sharedInstance] setAccount:@"testAccount"];

Swift:

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

Etapa 6: Inicializar o SDK

Chame initialize com a app key para iniciar o SDK e coletar informações do dispositivo. Repita a chamada sempre que precisar atualizar essas informações.

Sintaxe:

-(bool)initialize:(NSString*)appKey

Parâmetro

Tipo

Descrição

appKey

NSString*

Chave de autenticação do SDK.

Retorna true em caso de sucesso e false em caso de falha.

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.")
}

Etapa 7: Assinar requisições

Chame vmpSign para gerar um token de assinatura para o corpo da requisição.

Sintaxe:

-(NSString*)vmpSign:(NSData*)inputBody

Parâmetro

Tipo

Descrição

inputBody

NSData*

Corpo da requisição a ser assinado.

Retorna uma string de assinatura (NSString*) em caso de sucesso. Essa assinatura é denominada wToken.

Valores de retorno de erro:

Valor de retorno

Causa

Correção

you must call initialize

initialize não foi chamado

Chame initialize antes de vmpSign

you must input body

inputBody não foi fornecido

Passe o corpo da requisição ao chamar vmpSign

NULL

Inicialização incompleta

Chame vmpSign novamente

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)

Etapa 8: Enviar a requisição assinada

Adicione o wToken ao cabeçalho da requisição HTTP e envie-a.

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()

(Opcional) Testar com um projeto de exemplo

Antes de integrar ao aplicativo de produção, crie um projeto de teste iOS no Xcode para validar as etapas de integração.

O código abaixo pertence a um exemplo de ViewController.m em um projeto de teste chamado TigerTally_sdk_test:

//
//  ViewController.m
//  TigerTally_sdk_test
//
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup a...
}

@end