Como solicitar a senha do dispositivo?

Atualizado em 21. março 2026 por Jan Bunk


Se você estiver procurando uma solução final que solicite uma senha personalizada (não a senha do dispositivo) quando um usuário abrir o aplicativo verifique o recurso de proteção por senha.

Deseja melhorar a segurança do seu aplicativo e, ao mesmo tempo, manter uma excelente usabilidade? A autenticação local pode ser o caminho a seguir. Esta documentação mostrará como você pode solicitar que os usuários do seu aplicativo digitem o PIN do dispositivo, a impressão digital ou o ID facial antes de acessar partes do aplicativo.

Habilitando o recurso

Habilite a permissão biométrica em suas configurações de permissão. Caso contrário, este recurso pode funcionar apenas parcialmente (sem identificação facial) ou quebrar de maneiras inesperadas.

Usando a função do JavaScript

Recomendamos que verifique a função executeWhenAppReady() do nosso script auxiliar de aplicação. Ele garante que seu site não tente interagir com o aplicativo antes que ele esteja pronto ou quando o site for carregado usando um navegador comum (ReferenceError, a função não está definida).

requestLocalAuthentication

Use esta função para solicitar a autenticação do usuário.

A função retorna um objeto com um resultado booleano em caso de sucesso. Se o prompt de autenticação for cancelado ou o dispositivo não conseguir continuar, ela lança um código de erro em string.


<script>
    try {
        // This message will be displayed to the user along with the prompt.
        let reason = "Please authenticate to access this part of the app";

        // Returns a boolean. True if the authentication was successful, false if the authentication challenge failed.
        // If the prompt is canceled or the device cannot continue, an error string is thrown instead.
        let authenticationResult = (await requestLocalAuthentication(reason))["result"];
    }
    catch (e) {
        switch(e) {
            case "userCanceled":
                // The user canceled the prompt and didn't authenticate.
                break;
            case "authInProgress":
                // Another authentication request is already running.
                break;
            case "noCredentialsSet":
                // No biometrics, PIN, password, or pattern is configured.
                break;
            case "systemCanceled":
                // The system interrupted the authentication attempt, for example when the app gets closed.
                break;

            // All the errors below should be very rare in practice:

            case "timeout":
                // The authentication prompt timed out.
                break;
            case "uiUnavailable":
                // The system cannot show the authentication prompt right now.
                break;
            case "deviceError":
                // A device-level error prevented authentication.
                break;
            case "unknownError":
                // An unknown error occurred.
                break;
            default:
                // Any other error
                break;
        }
    }
</script>
    
Migração para apps atualizados pela última vez antes de 21 de março de 2026

Versões antigas do app ainda podem estar lidando com strings de erro como NotAvailable, PasscodeNotSet, LockedOut e PermanentlyLockedOut.

  • NotAvailable não é mais um caso específico. Normalmente vai virar noCredentialsSet, uiUnavailable ou unknownError.
  • PasscodeNotSet agora é noCredentialsSet.
  • LockedOut e PermanentlyLockedOut parecem não acontecer mais.
  • UserCancelled agora é userCanceled.
  • auth_in_progress agora é authInProgress.
  • no_activity e no_fragment_activity agora são uiUnavailable.