Configurar o ambiente do aplicativo móvel
Nesta parte, vamos criar um aplicativo Android moderno usando Kotlin e Jetpack Compose para a interface do usuário, que servirá como modelo para o próximo módulo, no qual o aplicativo se comunicará com o backend (que criamos anteriormente). O backend se comunicará com o Vonage Verify.
Visão geral do fluxo do aplicativo
O aplicativo seguirá este fluxo:
- O usuário digita seu número de telefone.
- O aplicativo envia o número de telefone para o backend (
POST /verification). - Se a autenticação silenciosa for bem-sucedida, o usuário é verificado.
- Se isso não funcionar (ou não estiver disponível), o usuário será solicitado a fornecer o código por SMS.
- O aplicativo envia o código para o backend (
POST /check-code). - O aplicativo exibe o resultado da verificação.
Lembre-se: O aplicativo para Android nunca armazena informações confidenciais da Vonage. Ele apenas faz chamadas para o seu backend.
Criar o projeto Android
-
Abra o Android Studio.
-
Clique Novo projeto → Atividade de criação vazia.
-
Use estas configurações:
- Nome:
Verify2FADemo - Idioma: Kotlin
- SDK mínimo: API 24 (Android 7.0)
- Nome:
-
Clique Concluir e aguarde até que a sincronização do Gradle seja concluída.
Configurar as dependências do Android
Abrir app/build.gradle.kts e adicione (ou atualize) as seguintes dependências.
dependencies {
// Jetpack Compose (UI)
implementation("androidx.activity:activity-compose:1.12.3")
implementation(platform("androidx.compose:compose-bom:2026.01.01"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.material3:material3")
// Networking + JSON parsing
implementation("com.squareup.okhttp3:okhttp:5.3.2")
implementation("com.google.code.gson:gson:2.13.2")
// Coroutines (we'll use these for background networking)
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2")
}
Vale a pena explicar isso aos leitores que ainda não estão familiarizados com o mundo dos dispositivos móveis:
-
Bibliotecas de composição: Criar uma interface de usuário com funções em Kotlin em vez de layouts em XML (menos código repetitivo, mais fácil de acompanhar em um tutorial).
-
OkHttp: Um cliente HTTP confiável para se comunicar com seu backend. (O Android não vem com um cliente HTTP moderno e “bom” por padrão.)
-
Gson: Converte objetos Kotlin/Java ↔ JSON para que você não precise criar manualmente strings JSON em todos os lugares.
-
Corrotinas: Os aplicativos Android não devem bloquear a thread principal. As corrotinas nos permitem realizar operações de rede em segundo plano e atualizar a interface do usuário com segurança.
Depois de editar o arquivo, clique em Sincronizar agora.
Permissões de Internet e rede local
Em AndroidManifest.xml, adicione isso dentro do <manifest> tag:
<uses-permission android:name="android.permission.INTERNET" />
Sem isso, o Android simplesmente bloqueará todas as chamadas de rede de saída.
Se você chamar um backend por conexão simples http://... (não HTTPS), o Android pode bloqueá-lo, dependendo do SDK de destino e das configurações de segurança de rede.
Para o desenvolvimento local, você pode permitir o tráfego em texto simples adicionando isto ao arquivo <application> tag:
<application
android:usesCleartextTraffic="true"
... >
Armazenar a configuração do backend da loja em local.properties
Codificar URLs diretamente nos arquivos Kotlin é frágil e inseguro.
Em vez disso, vamos armazenar a URL do backend em local.properties, que é:
- Não foi enviado para o Git
- Específico do ambiente
- Projetado para configuração local
Abrir (ou criar) local.properties na raiz do projeto Android e adicione:
BACKEND_URL=http://your-backend-ip:3000
Em seguida, disponibilizamos esse valor para o aplicativo Android por meio de BuildConfig.
Em app/build.gradle.kts, acrescente:
android {
defaultConfig {
buildConfigField(
"String",
"BACKEND_URL",
"\"${project.findProperty("BACKEND_URL")}\""
)
}
}
Em seguida, sincronize o Gradle novamente. Isso gera:
BuildConfig.BACKEND_URL
que podemos usar com segurança no código Kotlin.
Introdução à autenticação silenciosa
A autenticação silenciosa leva um bom tempo para ser compreendida. Este tutorial mostra como criar uma integração do zero usando Node.js e Kotlin