Biometric para Kotlin: guia completo com exemplos práticos
A autenticação biométrica tornou-se essencial em aplicativos mobile modernos. Ela permite que os usuários confirmem sua identidade usando impressão digital, reconhecimento facial ou íris, sendo muito mais prática e segura do que digitar senhas. A biblioteca Biometric para Kotlin (parte do AndroidX) oferece uma API unificada para trabalhar com todos os sensores biométricos em dispositivos Android.
Por que usar essa biblioteca? Primeiro, ela abstrai as diferenças de implementação dos sensores biométricos entre fabricantes. Segundo, gerencia automaticamente cenários onde a biometria não está disponível (ex.: sem leitor) ou está bloqueada. Terceiro, integra-se diretamente com o Android Keystore, permitindo criar chaves criptografadas que só podem ser usadas após autenticação bem-sucedida do usuário.
Neste artigo, vamos detalhar todos os aspectos do uso da biblioteca Biometric para Kotlin: desde a instalação e um exemplo mínimo até técnicas avançadas e erros comuns. Você aprenderá a adicionar autenticação biométrica ao seu app, tornando-o seguro e intuitivo para o usuário.
Instalação
Para usar a biblioteca Biometric no seu projeto Android com Kotlin, adicione a seguinte dependência no arquivo build.gradle (nível do módulo):
dependencies {
implementation("androidx.biometric:biometric:1.2.0-alpha05")
}
Além disso, certifique-se de declarar a permissão para uso de sensores biométricos no AndroidManifest.xml:
Se seu app for direcionado ao Android 12 (API 31) ou superior, é recomendável adicionar também a permissão para identificar o tipo exato de biometria:
Início rápido: exemplo funcional mínimo
Vamos criar uma Activity simples que, ao clicar em um botão, inicia a autenticação biométrica e exibe o resultado em um Toast.
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.biometric.BiometricManager
import androidx.biometric.BiometricPrompt
import androidx.core.content.ContextCompat
import java.util.concurrent.Executors
class MainActivity : AppCompatActivity() {
private lateinit var biometricPrompt: BiometricPrompt
private lateinit var promptInfo: BiometricPrompt.PromptInfo
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val authButton: Button = findViewById(R.id.auth_button)
// Verifica se a biometria está disponível no dispositivo
val biometricManager = BiometricManager.from(this)
when (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)) {
BiometricManager.BIOMETRIC_SUCCESS -> {
// Biometria disponível, configura o diálogo
setupBiometricPrompt()
}
BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
Toast.makeText(this, "Dispositivo sem sensor biométrico", Toast.LENGTH_LONG).show()
}
BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> {
Toast.makeText(this, "Sensor biométrico temporariamente indisponível", Toast.LENGTH_LONG).show()
}
BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> {
Toast.makeText(this, "Nenhuma biometria cadastrada", Toast.LENGTH_LONG).show()
}
}
}
private fun setupBiometricPrompt() {
val executor = Executors.newSingleThreadExecutor()
val callback = object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
runOnUiThread {
Toast.makeText(this@MainActivity, "Erro: $errString", Toast.LENGTH_SHORT).show()
}
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
runOnUiThread {
Toast.makeText(this@MainActivity, "Autenticação bem-sucedida!", Toast.LENGTH_SHORT).show()
}
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
runOnUiThread {
Toast.makeText(this@MainActivity, "Falha na autenticação", Toast.LENGTH_SHORT).show()
}
}
}
biometricPrompt = BiometricPrompt(this, executor, callback)
promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle("Autenticação Biométrica")
.setSubtitle("Confirme sua identidade")
.setDescription("Toque no sensor de impressão digital")
.setNegativeButtonText("Cancelar")
.build()
findViewById Também na biblioteca
Newtonsoft.Json para C# (.NET): guia completo com exemplos
Geração de PDF em PHP: bibliotecas, ferramentas e exemplos de código
Cast para Go: guia completo com exemplos práticos