Todos os produtos
Search
Central de documentação

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

Última atualização: Aug 24, 2026

Para ative a proteção de aplicativo em seus apps Android, integre o Anti-Bot SDK (referido como 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 app tiver como alvo um nível de API anterior, o SDK não funcionará conforme o esperado.

Pré-requisitos

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

  • A proteção de aplicativo adquirida e habilitada. 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, em que X.Y.Z representa o número da versão.

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

Cada conta Alibaba Cloud possui uma app key única, válida para todos os nomes de domínio na sua instância do Web Application Firewall (WAF), tanto para apps Android quanto iOS. Exemplo de app key:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****

Como funciona

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

(Opcional) Crie um projeto de teste Android

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

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

Execute o projeto de teste para verifique se ele 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 arquivo AliTigerTally.aar para o diretório libs do seu projeto. Você também pode arrastar o arquivo diretamente para esse diretório.

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

    • Declare libs como 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 real da versão presente no nome do arquivo AAR baixado.
  3. Clique em Sync Now para aplicar as alterações.

  4. Se utilizar o ProGuard para ofuscar seu app, adicione a seguinte regra ao arquivo de configuração do ProGuard logo após incluir a dependência. Isso evita que as classes do SDK sejam removidas durante a compilação, o que causaria falhas em tempo de execução.

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

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

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

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

Etapa 4: Solicite permissões

Adicione as seguintes permissões ao arquivo AndroidManifest.xml. Apenas a permissão INTERNET é obrigató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 requisições assinadas ao WAF.

android.permission.ACCESS_NETWORK_STATE

Não

Não — concedida automaticamente na instalação

Lê o status de rede do dispositivo para aprimorar os sinais de risco.

android.permission.ACCESS_WIFI_STATE

Não

Não — concedida automaticamente na instalação

Lê o status da conexão Wi-Fi para aprimorar os sinais de risco.

android.permission.READ_PHONE_STATE

Não

Sim — solicite em tempo de execução

Lê a identidade do dispositivo para aprimorar os sinais de risco.

android.permission.BLUETOOTH

Não

Não — concedida automaticamente na instalação

Lê informações de dispositivos Bluetooth para aprimorar os sinais de risco.

android.permission.READ_EXTERNAL_STORAGE

Não

Sim — solicite em tempo de execução

Lê o armazenamento externo para aprimorar os sinais de risco.

android.permission.CHANGE_NETWORK_STATE

Não

Não — concedida automaticamente na instalação

Modifica o estado de conectividade de rede para aprimorar os sinais de risco.

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 requisições do SDK. Isso ajuda o WAF a aplicar políticas de proteção no nível do usuário. Ignore esta chamada se o usuário não estiver conectado; nesse caso, 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. Utilize um valor mascarado para proteger a privacidade do usuário.

5b. Inicialize o SDK

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

Dois modos de coleta estão disponíveis:

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

  • NOT_GRANTED: Ignora campos sensíveis. Recomendado quando o usuário ainda não aceitou 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 da aplicação.

appkey

String

A app key obtida no console do WAF.

type

CollectType

Modo de coleta de dados: DEFAULT ou NOT_GRANTED.

5c. Assine a requisição

Chame vmpSign() antes de cada requisição http de saída. Passe o corpo da requisição como array de bytes; para requisiçõ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 requisição a ser assinado. Passe null ou um array de bytes vazio para requisições GET ou POST vazias.

5d. Adicione a assinatura ao cabeçalho http

Defina o valor de wToken como propriedade de cabeçalho http antes de enviar a requisição. O exemplo a seguir utiliza 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 requisição de saída enviada pelo seu app:

  1. A função vmpSign() gera uma assinatura wToken a partir do corpo da requisição.

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

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

Próximos passos