---
title: "Autopreenchimento de OTP por SMS: Android, iOS e Web"
description: "Como funciona o autopreenchimento de OTP no Android, iOS e web: hash do SMS Retriever, códigos vinculados ao domínio, WebOTP, formato único e WhatsApp."
canonical: "https://omnichannels.ai/pt/blog/otp-autofill-android-ios-web/"
language: "pt"
updated: "2026-11-08"
publisher: "BroadNet Technologies"
brand: "OmniChannels.ai"
category: "integration"
primaryQuery: "autopreenchimento otp sms android ios"
keywords: ["formato sms retriever api", "android sms user consent api", "preenchimento automático código de segurança ios", "código sms vinculado ao domínio", "webotp api", "autocomplete one-time-code", "autopreenchimento com um toque whatsapp", "hash do app otp sms"]
published: "2026-11-08"
author: "OmniChannels.ai Editorial Team"
reviewer: "BroadNet Messaging Solutions Team"
readingMinutes: 9
answer: "O autopreenchimento de OTP combina três mecanismos distintos. Apps Android usam a SMS Retriever API, que exige um hash do app de 11 caracteres em uma mensagem de até 140 bytes, ou a SMS User Consent API, que dispensa o hash. O iOS sugere códigos a partir do próprio SMS, e códigos vinculados ao domínio terminam com uma linha como @example.com #123456. Sites usam autocomplete=\"one-time-code\" e a WebOTP API, que leem essa mesma última linha."
takeaways: ["O Android tem duas APIs: SMS Retriever (mensagem de até 140 bytes com um código de uso único e um hash do app de 11 caracteres) e SMS User Consent (o usuário aprova o compartilhamento de uma mensagem).", "No iOS, defina o campo com o tipo de conteúdo one-time-code; códigos vinculados ao domínio terminam com uma última linha com @domínio, um espaço e #código, com suporte a partir do iOS 14.", "Na web, adicione autocomplete=\"one-time-code\" ao input e chame navigator.credentials.get com o transporte sms no Chrome para Android; o Safari usa o atributo.", "Uma única mensagem pode atender aos três se o hash do app ficar acima de uma última linha com @domínio #código, mas teste em aparelhos e operadoras reais.", "Os templates de autenticação do WhatsApp oferecem os botões copiar código, um toque e zero toque; o zero toque é exclusivo do Android."]
faq: 
  - q: "Qual é o formato de mensagem da SMS Retriever API?"
    a: "A documentação do Google diz que a mensagem não pode ter mais de 140 bytes, deve conter um código de uso único que o app devolve ao seu servidor e incluir um hash de 11 caracteres que identifica o app. O restante do conteúdo é livre. O hash permite que o Google Play Services encaminhe a mensagem ao app certo sem permissões extras."
  - q: "Preciso de um hash do app para a SMS User Consent API?"
    a: "A visão geral do Google sobre a SMS User Consent API não descreve um hash do app. Em vez disso, o usuário vê um aviso e decide se compartilha a mensagem com o seu app. O app precisa começar a escutar antes de o SMS chegar e depois extrai o código do próprio texto da mensagem."
  - q: "O que é um código SMS vinculado ao domínio no iOS?"
    a: "É um SMS cuja última linha vincula o código ao seu domínio: o domínio precedido de @, um espaço e o código precedido de #. A Apple documenta o recurso a partir do iOS 14. O preenchimento automático só sugere o código quando o site aberto no Safari, ou um domínio associado do app, corresponde ao domínio da mensagem."
  - q: "Como o WebOTP lê o SMS?"
    a: "A página chama navigator.credentials.get com a opção otp e o transporte sms. Quando chega uma mensagem cuja última linha é @host #código e o host corresponde à origem da página, o navegador pede confirmação ao usuário e devolve o código. É preciso HTTPS, e o navegador documentado é o Chrome para Android."
  - q: "Por que o meu OTP não é preenchido automaticamente?"
    a: "As causas mais comuns são um código que não se identifica com clareza, um hash do app errado ou ausente no Android, uma última linha fora do formato @domínio #código, um domínio diferente do da página ou um texto que ultrapassa o limite de bytes. Confira cada ponto com as regras de formato e teste em um aparelho real."
  - q: "O WhatsApp oferece autopreenchimento de OTP?"
    a: "Sim. Os templates de autenticação da Meta aceitam um botão de copiar código, um botão de autopreenchimento com um toque e a opção de zero toque. Um toque e zero toque exigem o nome do pacote Android e o hash de assinatura. O zero toque só funciona no Android; em outras plataformas o usuário recebe o botão de copiar código."
sources: 
  - title: "SMS Retriever API: perform SMS verification — Google for Developers"
    url: "https://developers.google.com/identity/sms-retriever/verify"
  - title: "SMS User Consent API: request a one-time code — Google for Developers"
    url: "https://developers.google.com/identity/sms-retriever/user-consent/request"
  - title: "Enabling AutoFill for domain-bound SMS codes — Apple Developer"
    url: "https://developer.apple.com/documentation/security/enabling-autofill-for-domain-bound-sms-codes"
  - title: "Verify phone numbers on the web with the WebOTP API — Chrome for Developers"
    url: "https://developer.chrome.com/docs/identity/web-apis/web-otp"
  - title: "WebOTP API — WICG specification"
    url: "https://wicg.github.io/web-otp/"
  - title: "Authentication templates — WhatsApp Business Platform, Meta for Developers"
    url: "https://developers.facebook.com/docs/whatsapp/business-management-api/authentication-templates"
---

# Autopreenchimento de OTP por SMS: Android, iOS e Web

Canonical: https://omnichannels.ai/pt/blog/otp-autofill-android-ios-web/
Language: pt
Publisher: OmniChannels.ai by BroadNet Technologies

Este guia é para desenvolvedores e donos de produto que querem que o código de verificação seja preenchido sozinho no Android, no iPhone e na web. Ele explica o que cada plataforma exige do SMS, como escrever uma única mensagem que sirva às três, como os templates de autenticação do WhatsApp tratam o autopreenchimento e o que costuma dar errado.

## Como funciona o autopreenchimento de OTP em cada plataforma?

Cada plataforma lê o SMS de um jeito, então não existe um único interruptor. O Android exige um hash do app ou o consentimento do usuário, o iOS detecta os códigos por conta própria e os navegadores leem uma última linha formatada.

| Plataforma | Mecanismo | O que o SMS precisa ter | Ação do usuário |
|---|---|---|---|
| App Android | SMS Retriever API | Até 140 bytes, um código de uso único e um hash do app de 11 caracteres | Nenhuma |
| App Android | SMS User Consent API | Uma mensagem com um código de uso único | Aprova o compartilhamento de uma mensagem |
| App iOS e iPadOS | Preenchimento automático de código de segurança | Um código que o iOS consiga detectar; formato vinculado ao domínio recomendado | Toca na sugestão |
| Web (Safari) | `autocomplete="one-time-code"` | Última linha vinculada ao domínio | Toca na sugestão |
| Web (Chrome para Android) | WebOTP API | Última linha `@host #code` | Confirma o aviso |

Tudo isso só ajuda se o SMS chegar. Se ele não chegar, veja [OTP não recebido](/pt/blog/otp-not-received-troubleshooting/).

## Como funciona a SMS Retriever API do Android?

Seu app pede ao Google Play Services que escute uma mensagem, e essa mensagem traz um hash que identifica o app. Não é preciso nenhuma permissão extra no app.

A documentação do Google lista três requisitos para a mensagem de verificação. Ela deve:

1. ter no máximo 140 bytes;
2. conter um código de uso único que o app devolve ao seu servidor para concluir a verificação;
3. incluir uma string de hash de 11 caracteres que identifica o app.

Todo o resto da mensagem fica a seu critério. O fluxo é: o app inicia a API enquanto solicita o SMS, o seu servidor envia a mensagem, o Play Services a encaminha ao app, e o app extrai o código e o devolve ao servidor para validação. O servidor também deve verificar se o código é válido e não expirou.

### Como obtenho o hash de 11 caracteres?

O Google informa que o hash são os 11 primeiros caracteres de um hash codificado em base64. Ele é calculado a partir do certificado de assinatura do app, seguindo os passos com keytool da documentação do Google. Se o Google Play gerencia a assinatura do app, importe esse certificado para o cálculo. Se você assina diretamente, use o keystore e o alias de certificado de produção.

Como o hash depende do certificado de assinatura, uma build assinada com outra chave terá outro hash. Considere isso ao testar builds de debug com mensagens de produção e confirme o hash de cada configuração de assinatura que você publicar.

### E se eu preferir não gerenciar um hash?

Use a SMS User Consent API. A documentação do Google diz que o usuário é consultado antes de uma mensagem ser compartilhada, e a mensagem inteira passa a ficar disponível para o app, que extrai o código. Segundo a página do Google, a mensagem deve conter uma sequência alfanumérica de 4 a 10 caracteres com pelo menos um número, o listener cobre cinco minutos e você pode, opcionalmente, restringir a um remetente. Inicie a API antes de o SMS chegar: mensagens recebidas antes não são encaminhadas.

## Como o iOS e o iPadOS preenchem um código automaticamente?

O iOS detecta um SMS com um código de uso único e o oferece em campos que se declaram como campos de código. A Apple documenta dois passos para você.

1. Defina o tipo de conteúdo do campo. No UIKit, defina `textContentType` como `.oneTimeCode`. No SwiftUI, use o modificador `textContentType` com o mesmo valor. Em um site, defina `autocomplete="one-time-code"` no input.
2. Se quiser, vincule o código ao seu domínio. A partir do iOS 14 e do macOS Big Sur, a Apple permite formatar o SMS para que o preenchimento automático sugira o código apenas quando o site no Safari ou o domínio associado do app corresponder. Isso dificulta enganar alguém para digitar um código em um site de phishing.

O formato, como a Apple o documenta: qualquer texto primeiro e, depois, uma última linha com o seu domínio precedido de `@`, um espaço e o código precedido de `#`.

```text
Your Example code is 123456.

@example.com #123456
```

Em um app, adicione o domínio vinculado aos domínios associados do app, ou o preenchimento automático não vai sugerir o código. Códigos padrão sem vínculo continuam sendo detectados, mas a Apple recomenda o formato vinculado ao domínio.

## Como funciona o autopreenchimento de OTP na web?

Adicione primeiro o atributo e depois o JavaScript para os navegadores que o suportam.

```html
<input type="text" inputmode="numeric"
       autocomplete="one-time-code" name="otp" />
```

A documentação do Chrome recomenda o atributo para compatibilidade entre navegadores e diz que o Safari o usa para sugerir o código de um SMS formatado corretamente, embora não tenha a API JavaScript WebOTP.

No Chrome para Android, chame o WebOTP com o transporte `sms`. A API exige uma origem segura (HTTPS), e um `AbortController` permite cancelar a solicitação pendente se o usuário digitar o código manualmente.

```js
if ("OTPCredential" in window) {
  const ac = new AbortController();
  const form = document.querySelector("form");
  const input = document.querySelector("input[autocomplete=one-time-code]");

  form.addEventListener("submit", () => ac.abort());

  navigator.credentials
    .get({ otp: { transport: ["sms"] }, signal: ac.signal })
    .then((otp) => {
      input.value = otp.code;
      form.submit();
    })
    .catch(() => {}); // user dismissed, or no matching SMS
}
```

O SMS deve seguir o formato vinculado à origem da especificação WICG e do guia do Chrome: um código de quatro a dez caracteres alfanuméricos com pelo menos um número antes da última linha e, depois, uma última linha que começa com `@`, o host, um único espaço e `#` mais o código. O host não pode conter espaços em branco.

## Um único SMS funciona no Android, no iOS e na web?

Muitas vezes sim, porque as regras são compatíveis. Coloque o texto legível primeiro, o hash do Android em uma linha acima do final e a linha vinculada ao domínio por último. Esse layout foi montado a partir das regras documentadas, não é uma garantia dos fornecedores, então teste.

```text
Your Example code is 483921. Do not share it.
Ab3dE+9xYz1
@example.com #483921
```

Por que essa ordem: a Apple e a especificação web querem o domínio e o código na última linha. O Google exige o hash de 11 caracteres em algum ponto da mensagem, mas, na página que verificamos, não fixa a posição. O exemplo acima tem 78 bytes em caracteres latinos simples, bem dentro do limite de 140 bytes.

Checklist antes de publicar:

1. O código é um único token, bem separado dos demais números do texto.
2. O domínio da última linha corresponde ao site e ao domínio associado do app.
3. O tamanho total fica dentro de 140 bytes na variante com Retriever.
4. O hash corresponde à chave de assinatura da build em teste.
5. Teste feito em um aparelho de cada plataforma, nas operadoras pelas quais você realmente envia.

## E com texto em árabe e Unicode?

Mantenha o código e as duas partes legíveis por máquina em texto simples. O limite do Google é em bytes, e um SMS Unicode comporta bem menos caracteres que um GSM-7: 70 contra 160 em um único segmento (veja [limites de caracteres do SMS e Unicode](/pt/blog/sms-character-limits-unicode-arabic/)). Uma frase em árabe consome o orçamento rapidamente, e um único caractere fora do GSM converte a mensagem inteira para Unicode.

Abordagem segura: mantenha o código em dígitos latinos, `@domínio #código` em ASCII e o texto em árabe curto. Não encontramos documentação oficial sobre o autopreenchimento de códigos escritos em outros sistemas de dígitos, por isso deixamos esse ponto de fora e recomendamos testar antes de usar.

## Como os templates de autenticação do WhatsApp tratam o autopreenchimento?

Os templates de autenticação da Meta vêm com três estilos de botão, cada um com um texto de corpo fixo no formato `<code> is your verification code.`

| Botão | O que faz | Observações |
|---|---|---|
| Copiar código | O usuário toca para copiar o código e depois o cola no app | Funciona sem mudanças no app |
| Autopreenchimento com um toque | No Android, um botão abre o app e entrega o código | Exige `package_name` e `signature_hash` em `supported_apps` |
| Zero toque | Sem botão; o cliente do WhatsApp transmite o código ao app | Somente Android; é preciso aceitar os termos de zero toque da Meta |

A documentação da Meta também observa que, no iOS 26 e posteriores, as sugestões do teclado oferecem o autopreenchimento sem integração, e que usuários de plataformas sem zero toque recebem um botão de copiar código. Você pode definir uma expiração com `code_expiration_minutes`, e a API de prévia aceita valores de 1 a 90 minutos. Compare os canais em [OTP por WhatsApp vs OTP por SMS](/pt/blog/whatsapp-otp-vs-sms-otp/).

## Exemplo prático: login em um app de transporte por aplicativo

A "Qafila Rides" (fictícia) tem um app Android, um app iOS e um site móvel em `qafila.example`.

1. O app Android inicia o SMS Retriever quando o usuário toca em "Enviar código".
2. O backend gera um código de seis dígitos, válido por alguns minutos, e envia a mensagem de três linhas acima pela API de SMS.
3. O Android entrega a mensagem ao app. O iOS oferece o código acima do teclado. No site móvel, o Safari o sugere e o Chrome o preenche via WebOTP.
4. O servidor valida o código uma única vez, rejeita reutilização e códigos expirados, e limita a taxa de solicitações.
5. Se o SMS não for confirmado em um curto intervalo, o backend oferece um template de autenticação do WhatsApp como segundo caminho.

## Quais são os erros mais comuns?

- **Código misturado com outros números.** Números extras (telefone, preço, data) ao lado do código confundem a detecção. Use um código por mensagem.
- **Hash errado.** O hash acompanha o certificado de assinatura. Um hash de uma chave de debug não corresponde a uma build de produção.
- **Domínio diferente.** `@example.com` deve corresponder ao site ou ao domínio associado; caso contrário, o iOS e o WebOTP não oferecem o código.
- **Última linha quebrada.** Qualquer coisa depois de `#code`, um espaço faltando ou espaços em branco dentro do domínio quebram o formato.
- **Mensagem longa demais ou carregada de Unicode,** o que ultrapassa o limite de 140 bytes do Retriever.
- **Escutar tarde demais.** A User Consent API ignora mensagens recebidas antes de ser iniciada.
- **Usar o autopreenchimento como segurança.** O autopreenchimento é uma conveniência. Continue validando no servidor, expirando os códigos e limitando as tentativas, e fique atento à [fraude de SMS pumping](/pt/blog/sms-pumping-fraud-prevention/).
- **Escopo.** Este guia cobre o comportamento documentado no momento da redação. As regras das plataformas mudam, então confira as fontes linkadas antes do lançamento.

Para a redação da mensagem e a escolha da expiração, veja nosso [guia de mensagens de OTP e autenticação](/pt/blog/otp-authentication-messages-guide/).

## Como a OmniChannels.ai ajuda

A OmniChannels.ai envia OTP por SMS e WhatsApp pela conectividade direta com operadoras da BroadNet, para que você controle o texto exato da mensagem de que o seu formato de autopreenchimento depende. Os templates do WhatsApp cobrem a autenticação com copiar código, um toque e zero toque. O fallback entre canais, por exemplo WhatsApp e depois SMS, é configurado por caso de uso, e os status de entrega chegam em um único formato de webhook. Veja a [documentação da API de SMS](/developers/sms/), a [documentação da API do WhatsApp](/developers/whatsapp/) e a [solução de OTP](/pt/solutions/otp-notifications/).
