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, ondeX.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
Copie o
AliTigerTally.aarpara o diretóriolibsdo seu projeto. Também é possível arrastar o arquivo diretamente para o diretório.-
Abra o
build.gradlee adicione as seguintes configurações:-
Declare o
libscomo 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.Zpelo número de versão real no nome do arquivo AAR baixado.
-
Clique em Sync Now para aplicar as alterações.
-
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 |
|
|
Sim |
Não — concedida automaticamente na instalação |
Permite que o SDK envie solicitações assinadas para o WAF. |
|
|
Não |
Não — concedida automaticamente na instalação |
Lê o status da rede do dispositivo para obter sinais de risco aprimorados. |
|
|
Não |
Não — concedida automaticamente na instalação |
Lê o status da conexão Wi-Fi para obter sinais de risco aprimorados. |
|
|
Não |
Sim — solicite em tempo de execução |
Lê a identidade do dispositivo para obter sinais de risco aprimorados. |
|
|
Não |
Não — concedida automaticamente na instalação |
Lê as informações do dispositivo Bluetooth para obter sinais de risco aprimorados. |
|
|
Não |
Sim — solicite em tempo de execução |
Lê o armazenamento externo para obter sinais de risco aprimorados. |
|
|
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 |
|
|
|
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 |
|
|
|
O contexto do aplicativo. |
|
|
|
A app key obtida no console do WAF. |
|
|
|
Modo de coleta de dados: |
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 |
|
|
|
Algoritmo de assinatura. Defina como |
|
|
|
O corpo da solicitação a ser assinado. Passe |
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:
O
vmpSign()gera uma assinaturawTokena partir do corpo da solicitação.Seu código anexa o
wTokencomo um cabeçalho HTTP.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.