El Anti-Bot SDK firma cada solicitud que envía su aplicación de iOS. WAF verifica la firma para detectar y bloquear el tráfico de bots antes de que llegue a su servidor.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
iOS 9.0 o posterior en los dispositivos de destino.
App Protection comprado y habilitado. Consulte Procedure to enable App Protection.
El paquete del SDK de iOS (
AliTigerTally_IDFA.frameworkoAliTigerTally_NOIDFA.framework). Envíe un ticket para obtener el SDK.Su app key. Para obtenerla, inicie sesión en la consola de WAF, vaya a Protection Configurations > Website Protection, abra la pestaña Bot Management, active App Protection y haga clic en Obtain and Copy Appkey.
Cada cuenta de Alibaba Cloud tiene una app key que se comparte entre todos los nombres de dominio de su instancia de WAF. La misma app key funciona tanto para aplicaciones de Android como de iOS.

Ejemplo de app key:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****
Elegir una versión del SDK
El SDK está disponible en dos versiones, según si su aplicación usa el Identifier for Advertisers (IDFA):
|
Versión |
Archivo de framework |
Cuándo usarla |
|
IDFA |
|
Su aplicación usa IDFA. |
|
Non-IDFA |
|
Su aplicación no usa IDFA. |
Cómo funciona
El SDK firma el cuerpo de la solicitud mediante
vmpSigny devuelve un token de firma (wToken).Su aplicación adjunta
wTokenal encabezado de la solicitud HTTP y la envía.WAF analiza sintácticamente
wTokenen cada solicitud entrante, bloquea el tráfico malicioso y reenvía las solicitudes legítimas a su servidor.
Firme las solicitudes en eventos críticos para el negocio, como el inicio de sesión, el envío de pagos o cualquier acción que requiera protección.
Integrar el SDK
Paso 1: Configurar el proyecto de Xcode
Abra su proyecto de iOS en Xcode y copie el framework del SDK en el directorio del proyecto.
Paso 2: Agregar bibliotecas de dependencias
Agregue a continuación las bibliotecas a su destino:
|
Biblioteca |
Versión sin IDFA |
Versión con IDFA |
|
|
Obligatorio |
Obligatorio |
|
|
Obligatorio |
Obligatorio |
|
|
Obligatorio |
Obligatorio |
|
|
No obligatorio |
Obligatorio |
Paso 3: Agregar la marca del vinculador -ObjC
En Build Settings, agregue -ObjC a Other Linker Flags.
Paso 4: Importar el encabezado del SDK
Objective-C: agregue la importación a cualquier archivo de origen que llame al SDK:
// Non-IDFA version
#import <AliTigerTally_NOIDFA/AliTigerTally.h>
// IDFA version
#import <AliTigerTally_IDFA/AliTigerTally.h>
Swift: cree un archivo de encabezado puente y agregue la importación:
#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 */
Después, establezca la ruta del encabezado puente en Build Settings > Objective-C Bridging Header.
Paso 5: Establecer un identificador de usuario (opcional)
Llame a setAccount para asociar un identificador de usuario con las solicitudes del SDK. Esto le permite construir políticas de protección de WAF más detalladas. Si se trata de usuarios invitados, omita esta llamada y pase directamente a initialize.
Sintaxis:
-(void)setAccount:(NSString*)account
|
Parámetro |
Tipo |
Descripción |
|
|
|
Identificador de usuario. Use un valor ofuscado en lugar de un identificador sin procesar. |
Objective-C:
// Use a masked user ID
[[AliTigerTally sharedInstance] setAccount:@"testAccount"];
Swift:
AliTigerTally.sharedInstance().setAccount("testAccount")
Paso 6: Inicializar el SDK
Llame a initialize con su app key para iniciar el SDK y recopilar información del dispositivo. Vuelva a llamarlo cuando necesite actualizar la información del dispositivo.
Sintaxis:
-(bool)initialize:(NSString*)appKey
|
Parámetro |
Tipo |
Descripción |
|
|
|
Su clave de autenticación del SDK. |
Devuelve true si la operación es exitosa y false si falla.
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.")
}
Paso 7: Firmar solicitudes
Llame a vmpSign para generar un token de firma correspondiente al cuerpo de la solicitud.
Sintaxis:
-(NSString*)vmpSign:(NSData*)inputBody
|
Parámetro |
Tipo |
Descripción |
|
|
|
El cuerpo de la solicitud que se va a firmar. |
Si la operación es exitosa, devuelve una cadena de firma (NSString*). A esta firma se le conoce como wToken.
Valores de retorno de error:
|
Valor de retorno |
Causa |
Solución |
|
|
No se llamó a |
Llame a |
|
|
No se proporcionó |
Pase el cuerpo de la solicitud al llamar a |
|
|
La inicialización no ha terminado |
Vuelva a llamar a |
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)
Paso 8: Enviar la solicitud firmada
Agregue wToken al encabezado de la solicitud HTTP y envíela.
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) Probar con un proyecto de ejemplo
Antes de integrarlo en su aplicación de producción, cree un proyecto de prueba de iOS en Xcode para comprobar los pasos de integración.
A continuación se muestra el código de un archivo ViewController.m de ejemplo, dentro de un proyecto de prueba llamado 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