Todos os produtos
Search
Central de documentação

Web Application Firewall:Integrar o SDK de proteção de aplicativo para Android

Última atualização: Sep 23, 2026

Para ativar a proteção de aplicativo em seus aplicativos Android, integre o Anti-Bot SDK (chamado de SDK neste tópico) antes de ativar o recurso.

Limitações

O nível 16 ou superior da API do Android é obrigatório. Se o seu aplicativo tiver como alvo um nível de API anterior, o SDK não funcionará conforme o esperado.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • A proteção de aplicativo adquirida e ativada. Consulte Procedure to enable app protection.

  • O pacote do SDK (arquivo AAR) para Android. Entre em contato com o suporte técnico no grupo de service do DingTalk ou envie um ticket para solicitá-lo. O nome do arquivo é AliTigerTally_X.Y.Z.aar, onde X.Y.Z é o número da versão.

  • A app key (chave de autenticação do SDK). Para obtê-la, acesse o console do WAF, escolha Protection Config > Website Protection, acesse a guia Bot Management, ative a App Protection e clique em Obtain and Copy Appkey.

Cada conta Alibaba Cloud tem uma app key exclusiva que funciona para todos os nomes de domínio em sua instância do Web Application Firewall (WAF), tanto para aplicativos Android quanto para iOS. Exemplo de app key:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****

Como funciona

O SDK assina cada solicitação de saída do seu aplicativo. O WAF verifica essas assinaturas no servidor para detectar e bloquear tráfego malicioso e, em seguida, encaminha as solicitações legítimas para o seu servidor de origem.

(Opcional) Crie um projeto de teste Android

Se você quiser praticar as etapas de integração antes de aplicá-las ao seu aplicativo de produção, crie primeiro um projeto de teste no Android Studio.

A figura a seguir mostra um projeto de teste de exemplo chamado TigerTally_sdk_test.

Execute o projeto de teste e verifique se funciona antes de prosseguir.

Integre o SDK

Etapa 1: Abra o projeto no Android Studio

Abra seu projeto no Android Studio e acesse o diretório de arquivos do projeto.

Etapa 2: Adicione a dependência AAR

  1. Copie o AliTigerTally.aar para o diretório libs do seu projeto. Também é possível arrastar o arquivo diretamente para o diretório.

  2. Abra o build.gradle e adicione as seguintes configurações:

    • Declare o libs como um repositório local:

      repositories {
          flatDir {
              dirs 'libs'
          }
      }
    • Adicione uma dependência de compilação:

      dependencies {
          compile(name: 'AliTigerTally_X.Y.Z', ext: 'aar')
      }
      Importante: Substitua X.Y.Z pelo número de versão real no nome do arquivo AAR baixado.
  3. Clique em Sync Now para aplicar as alterações.

  4. Se você usar o ProGuard para obfuscar seu aplicativo, adicione a seguinte regra ao seu arquivo de configuração do ProGuard logo após adicionar a dependência. Isso evita a remoção das classes do SDK durante a compilação, o que causaria falhas em tempo de execução.

    -keep class com.aliyun.TigerTally.* {*;}

Etapa 3: Configure os filtros de biblioteca nativa (se necessário)

Pule esta etapa se o seu projeto já incluir um arquivo SO. Caso contrário, adicione o seguinte bloco ndk ao build.gradle:

android {
    defaultConfig {
        ndk {
            abiFilters 'arm64-v8a', 'x86', 'armeabi-v7a'
            //abiFilters "armeabi-v7a"
        }
    }
}

Etapa 4: Solicite as permissões

Adicione as seguintes permissões ao seu AndroidManifest.xml. Apenas a permissão INTERNET é necessária para o funcionamento do SDK.

Permissão

Obrigatória

Solicitação em tempo de execução (Android 6.0+)

Descrição

android.permission.INTERNET

Sim

Não — concedida automaticamente na instalação

Permite que o SDK envie solicitações assinadas para o WAF.

android.permission.ACCESS_NETWORK_STATE

Não

Não — concedida automaticamente na instalação

Lê o status da rede do dispositivo para obter sinais de risco aprimorados.

android.permission.ACCESS_WIFI_STATE

Não

Não — concedida automaticamente na instalação

Lê o status da conexão Wi-Fi para obter sinais de risco aprimorados.

android.permission.READ_PHONE_STATE

Não

Sim — solicite em tempo de execução

Lê a identidade do dispositivo para obter sinais de risco aprimorados.

android.permission.BLUETOOTH

Não

Não — concedida automaticamente na instalação

Lê as informações do dispositivo Bluetooth para obter sinais de risco aprimorados.

android.permission.READ_EXTERNAL_STORAGE

Não

Sim — solicite em tempo de execução

Lê o armazenamento externo para obter sinais de risco aprimorados.

android.permission.CHANGE_NETWORK_STATE

Não

Não — concedida automaticamente na instalação

Modifica o estado de conectividade de rede para obter sinais de risco aprimorados.

Etapa 5: Adicione o código de integração

5a. (Opcional) Defina o ID do usuário

Chame setAccount() para associar um ID de usuário às solicitações do SDK. Isso ajuda o WAF a aplicar políticas de proteção no nível de usuário. Ignore esta chamada se o usuário não estiver conectado — em vez disso, chame init() diretamente.

// Signature: int setAccount(String account)
// Returns: 0 on success, -1 on failure

final String account = "account"; // Use a masked user ID
TigerTallyAPI.setAccount(account);

Parâmetro

Tipo

Descrição

account

String

O ID do usuário. Use um valor mascarado para proteger a privacidade do usuário.

5b. Inicialize o SDK

Chame init() uma vez na inicialização do seu aplicativo. Essa função coleta as informações do dispositivo uma única vez para a análise de risco.

Há dois modos de coleta disponíveis:

  • DEFAULT: Coleta todos os dados do dispositivo, incluindo campos sensíveis (imei, imsi, simSerial, wifiMac, wifiList, bluetoothMac). Requer as permissões correspondentes. Use este modo após o usuário aceitar a política de privacidade do aplicativo.

  • NOT_GRANTED: Ignora campos sensíveis. Use este modo antes de o usuário aceitar a política de privacidade.

// Signature: int init(Context context, String appkey, int type)
// Returns: 0 on success, -1 on failure

final String appkey = "your_appkey";

// Full data collection (after user accepts privacy policy)
int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.DEFAULT);

// Exclude sensitive fields (before user accepts privacy policy)
int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.NOT_GRANTED);

Log.d("AliSDK", "ret:" + ret);

Parâmetro

Tipo

Descrição

context

Context

O contexto do aplicativo.

appkey

String

A app key obtida no console do WAF.

type

CollectType

Modo de coleta de dados: DEFAULT ou NOT_GRANTED.

5c. Assine a solicitação

Chame vmpSign() antes de cada solicitação HTTP de saída. Passe o corpo da solicitação como um array de bytes; para solicitações GET ou corpos POST vazios, passe null ou "".getBytes("UTF-8").

// Signature: String vmpSign(int signType, byte[] input)
// Returns: the wToken signature string

String request_body = "i am the request body, encrypted or not!";
String wToken = null;
try {
    wToken = TigerTallyAPI.vmpSign(1, request_body.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
Log.d("AliSDK", "wToken:" + wToken);

Parâmetro

Tipo

Descrição

signType

int

Algoritmo de assinatura. Defina como 1 para usar o algoritmo padrão.

input

byte[]

O corpo da solicitação a ser assinado. Passe null ou um array de bytes vazio para solicitações GET ou POST vazias.

5d. Adicione a assinatura ao cabeçalho HTTP

Defina o valor wToken como uma propriedade de cabeçalho HTTP antes de enviar a solicitação. O exemplo a seguir usa HttpURLConnection:

String request_body = "i am the request body, encrypted or not!";
new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            URL url = new URL("https://www.aliyundoc.com");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(5000);
            conn.setRequestMethod("POST");
            // Add the wToken signature to the request header
            conn.setRequestProperty("wToken", wToken);
            OutputStream os = conn.getOutputStream();
            // Write the request body
            byte[] requestBody = request_body.getBytes("UTF-8");
            os.write(requestBody);
            os.flush();
            os.close();
            int code = conn.getResponseCode();
            Log.d("respCode", Integer.toString(code));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();

O que acontece após a integração

Após a integração, para cada solicitação de saída enviada pelo seu aplicativo:

  1. O vmpSign() gera uma assinatura wToken a partir do corpo da solicitação.

  2. Seu código anexa o wToken como um cabeçalho HTTP.

  3. O WAF inspeciona o cabeçalho wToken, bloqueia solicitações com falha na verificação de assinatura e encaminha solicitações válidas para o seu servidor de origem.

Próximos passos