---
title: "Compilazione automatica OTP via SMS: Android, iOS e web"
description: "Come funziona la compilazione automatica dell’OTP su Android, iOS e web: hash SMS Retriever, codici legati al dominio, WebOTP, un formato per tutti e WhatsApp."
canonical: "https://omnichannels.ai/it/blog/otp-autofill-android-ios-web/"
language: "it"
updated: "2026-11-08"
publisher: "BroadNet Technologies"
brand: "OmniChannels.ai"
category: "integration"
primaryQuery: "otp autofill sms android ios"
keywords: ["formato SMS Retriever API", "Android SMS User Consent API", "compilazione automatica codice iOS", "codice SMS legato al dominio", "WebOTP API", "autocomplete one-time-code", "autofill OTP WhatsApp one-tap", "hash app OTP SMS"]
published: "2026-11-08"
author: "OmniChannels.ai Editorial Team"
reviewer: "BroadNet Messaging Solutions Team"
readingMinutes: 9
answer: "La compilazione automatica dell’OTP si basa su tre meccanismi distinti. Le app Android usano la SMS Retriever API, che richiede un hash dell’app di 11 caratteri in un messaggio di al massimo 140 byte, oppure la SMS User Consent API, senza hash. iOS propone i codici leggendo l’SMS; i codici legati al dominio terminano con una riga come @example.com #123456. I siti web usano autocomplete=\"one-time-code\" e la WebOTP API, che leggono la stessa ultima riga."
takeaways: ["Android offre due API: SMS Retriever (messaggio di al massimo 140 byte con un codice monouso e un hash dell’app di 11 caratteri) e SMS User Consent (l’utente approva la condivisione di un messaggio).", "Su iOS impostate per il campo il tipo di contenuto one-time-code; i codici legati al dominio terminano con una riga finale composta da @dominio, uno spazio e #codice, supportata da iOS 14.", "Sul web aggiungete autocomplete=\"one-time-code\" al campo e chiamate navigator.credentials.get con il trasporto sms per Chrome su Android; Safari usa l’attributo.", "Un solo messaggio può soddisfare tutti e tre i casi se l’hash dell’app sta sopra una riga finale @dominio #codice, ma va provato su dispositivi e operatori reali.", "I template di autenticazione di WhatsApp offrono i pulsanti copia codice, one-tap e zero-tap; lo zero-tap è solo per Android."]
faq: 
  - q: "Qual è il formato del messaggio per la SMS Retriever API?"
    a: "La documentazione di Google indica che il messaggio non deve superare i 140 byte, deve contenere un codice monouso che la vostra app rimanda al server e includere un hash di 11 caratteri che identifica l’app. Per il resto il contenuto è libero. L’hash permette ai servizi Google Play di recapitare il messaggio all’app giusta senza permessi aggiuntivi."
  - q: "Serve un hash dell’app per la SMS User Consent API?"
    a: "La panoramica di Google sulla SMS User Consent API non descrive un hash dell’app. L’utente vede invece una richiesta e sceglie se condividere il messaggio con la vostra app. L’app deve mettersi in ascolto prima che arrivi l’SMS e poi estrae il codice dal testo del messaggio."
  - q: "Che cos’è un codice SMS legato al dominio su iOS?"
    a: "È un SMS la cui ultima riga lega il codice al vostro dominio: il dominio preceduto da @, uno spazio e il codice preceduto da #. Apple lo documenta da iOS 14 in poi. AutoFill propone il codice solo se il sito aperto in Safari, o un dominio associato dell’app, corrisponde al dominio indicato nel messaggio."
  - q: "Come legge l’SMS WebOTP?"
    a: "La pagina chiama navigator.credentials.get con l’opzione otp e il trasporto sms. Quando arriva un messaggio la cui ultima riga è @host #codice e l’host corrisponde all’origine della pagina, il browser chiede conferma all’utente e restituisce il codice. Serve HTTPS e il browser documentato è Chrome su Android."
  - q: "Perché il mio OTP non si compila in automatico?"
    a: "Le cause più comuni sono un codice non chiaramente identificabile, un hash dell’app errato o mancante su Android, un’ultima riga che non segue il formato @dominio #codice, un dominio che non corrisponde alla pagina oppure un testo che porta il messaggio oltre il limite di byte. Verificate ogni punto rispetto alle regole di formato, poi provate con un dispositivo reale."
  - q: "WhatsApp supporta la compilazione automatica dell’OTP?"
    a: "Sì. I template di autenticazione di Meta supportano un pulsante per copiare il codice, un pulsante di autofill one-tap e un’opzione zero-tap. One-tap e zero-tap richiedono il nome del pacchetto Android e l’hash della firma della vostra app. Lo zero-tap è supportato solo su Android; gli utenti di altre piattaforme ricevono invece un pulsante per copiare il codice."
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"
---

# Compilazione automatica OTP via SMS: Android, iOS e web

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

Questa guida è pensata per sviluppatori e product owner che vogliono far comparire da solo il codice di verifica su Android, iPhone e web. Spiega che cosa richiede ogni piattaforma all’SMS, come scrivere un unico messaggio valido per tutte e tre, come i template di autenticazione di WhatsApp gestiscono la compilazione automatica e che cosa di solito si rompe.

## Come funziona la compilazione automatica dell’OTP su ciascuna piattaforma?

Ogni piattaforma legge l’SMS a modo suo, quindi non esiste un interruttore unico. Android richiede un hash dell’app oppure il consenso dell’utente, iOS rileva i codici da solo e i browser leggono un’ultima riga formattata.

| Piattaforma | Meccanismo | Che cosa serve nell’SMS | Azione dell’utente |
|---|---|---|---|
| App Android | SMS Retriever API | Al massimo 140 byte, un codice monouso e un hash dell’app di 11 caratteri | Nessuna |
| App Android | SMS User Consent API | Un messaggio contenente un codice monouso | Approva la condivisione di un messaggio |
| App iOS e iPadOS | Compilazione automatica dei codici di sicurezza | Un codice che iOS riesce a rilevare; formato legato al dominio consigliato | Tocca il suggerimento |
| Web (Safari) | `autocomplete="one-time-code"` | Ultima riga legata al dominio | Tocca il suggerimento |
| Web (Chrome su Android) | WebOTP API | Ultima riga `@host #code` | Conferma la richiesta |

Tutti questi meccanismi servono solo se l’SMS arriva. In caso contrario, vedi [OTP non ricevuto](/it/blog/otp-not-received-troubleshooting/).

## Come funziona la SMS Retriever API di Android?

La vostra app chiede ai servizi Google Play di restare in ascolto di un solo messaggio, e il messaggio contiene un hash che identifica l’app. Non serve alcun permesso aggiuntivo per l’app.

La documentazione di Google elenca tre requisiti per il messaggio di verifica. Deve:

1. non superare i 140 byte;
2. contenere un codice monouso che la vostra app rimanda al server per completare la verifica;
3. includere una stringa hash di 11 caratteri che identifica l’app.

Tutto il resto del messaggio è a vostra scelta. Il flusso è questo: l’app avvia l’API mentre richiede l’SMS, il vostro server invia il messaggio, i servizi Play lo indirizzano all’app, e l’app estrae il codice e lo restituisce al server per la validazione. Il server dovrebbe anche controllare che il codice sia valido e non scaduto.

### Come si ottiene l’hash di 11 caratteri?

Secondo Google, l’hash è formato dai primi 11 caratteri di un hash codificato in base64. Si calcola a partire dal certificato di firma dell’app, con i passaggi keytool della documentazione di Google. Se la firma dell’app è gestita da Google Play, importate quel certificato per il calcolo. Se firmate direttamente, usate il keystore di produzione e l’alias del certificato.

Poiché l’hash dipende dal certificato di firma, una build firmata con un’altra chiave avrà un hash diverso. Tenetene conto quando provate build di debug con messaggi di produzione, e verificate l’hash per ogni configurazione di firma che rilasciate.

### E se preferiamo non gestire un hash?

Usate la SMS User Consent API. Secondo la documentazione di Google, all’utente viene chiesto il permesso prima che un messaggio sia condiviso, e l’intero messaggio diventa poi disponibile per l’app, che ne estrae il codice. Stando alla pagina di Google, il messaggio deve contenere una stringa alfanumerica di 4-10 caratteri con almeno un numero, l’ascolto dura cinque minuti ed è possibile limitarlo a un mittente. Avviate l’API prima che arrivi l’SMS: i messaggi ricevuti prima non vengono inoltrati.

## Come compilano un codice iOS e iPadOS?

iOS rileva un SMS che contiene un codice monouso e lo propone nei campi che si dichiarano campi codice. Apple documenta due passaggi.

1. Impostate il tipo di contenuto del campo. In UIKit impostate `textContentType` su `.oneTimeCode`. In SwiftUI usate il modificatore `textContentType` con lo stesso valore. Per un sito web, impostate `autocomplete="one-time-code"` sul campo.
2. Se volete, legate il codice al vostro dominio. Da iOS 14 e macOS Big Sur, Apple consente di formattare l’SMS in modo che AutoFill proponga il codice solo se il sito in Safari o il dominio associato dell’app corrisponde. Così è più difficile indurre qualcuno a inserire un codice su un sito di phishing.

Il formato, come lo documenta Apple: prima un testo qualsiasi, poi un’ultima riga con il vostro dominio preceduto da `@`, uno spazio e il codice preceduto da `#`.

```text
Your Example code is 123456.

@example.com #123456
```

Per un’app, aggiungete il dominio vincolato ai domini associati dell’app, altrimenti AutoFill non proporrà il codice. I codici standard senza il vincolo vengono comunque rilevati, ma Apple consiglia il formato legato al dominio.

## Come funziona la compilazione automatica dell’OTP sul web?

Aggiungete prima l’attributo, poi il JavaScript per i browser che lo supportano.

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

La documentazione di Chrome consiglia l’attributo per la compatibilità tra browser e precisa che Safari lo usa per proporre il codice da un SMS formattato correttamente, anche se non dispone dell’API JavaScript WebOTP.

Per Chrome su Android, chiamate WebOTP con il trasporto `sms`. L’API richiede un’origine sicura (HTTPS), e un `AbortController` permette di annullare la richiesta in sospeso se l’utente digita il codice a mano.

```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
}
```

L’SMS deve seguire il formato legato all’origine descritto nella specifica WICG e nella guida di Chrome: un codice di quattro-dieci caratteri alfanumerici con almeno un numero prima dell’ultima riga, poi un’ultima riga che inizia con `@`, l’host, un solo spazio e `#` più il codice. L’host non deve contenere spazi.

## Un solo SMS può funzionare su Android, iOS e web?

Spesso sì, perché le regole sono compatibili. Mettete prima il testo leggibile, l’hash Android su una riga sopra la fine e la riga legata al dominio per ultima. Questa struttura nasce dalle regole documentate, non da una garanzia del produttore, quindi provatela.

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

Perché quest’ordine: Apple e la specifica web vogliono dominio e codice nell’ultima riga. Google richiede l’hash di 11 caratteri in un punto qualsiasi del messaggio ma, nella pagina che abbiamo verificato, non ne fissa la posizione. L’esempio qui sopra pesa 78 byte in caratteri latini semplici, ben entro il limite di 140 byte.

Checklist prima del rilascio:

1. Il codice è un unico token, ben separato dalle altre cifre del testo.
2. Il dominio nell’ultima riga corrisponde al sito e al dominio associato dell’app.
3. La lunghezza totale rientra nei 140 byte per la variante Retriever.
4. L’hash corrisponde alla chiave di firma della build in prova.
5. Prova su un dispositivo per ogni piattaforma, con gli operatori attraverso cui inviate davvero.

## E il testo arabo e Unicode?

Mantenete semplici il codice e le due parti leggibili dalle macchine. Il limite di Google è in byte, e un SMS Unicode contiene molti meno caratteri di uno GSM-7: 70 contro 160 in un singolo segmento (vedi [limiti di caratteri degli SMS e Unicode](/it/blog/sms-character-limits-unicode-arabic/)). Una frase in arabo consuma quindi in fretta il budget, e un solo carattere non GSM porta l’intero messaggio in Unicode.

Approccio sicuro: codice in cifre latine, `@dominio #codice` in ASCII e testo arabo breve. Non abbiamo trovato documentazione ufficiale sulla compilazione automatica di codici scritti con altri sistemi di cifre, quindi la omettiamo e consigliamo di provare prima dell’uso.

## Come gestiscono la compilazione automatica i template di autenticazione di WhatsApp?

I template di autenticazione di Meta prevedono tre stili di pulsante, ciascuno con un testo del corpo fisso del tipo `<code> is your verification code.`

| Pulsante | Che cosa fa | Note |
|---|---|---|
| Copia codice | L’utente tocca per copiare il codice e lo incolla nella vostra app | Funziona senza modifiche all’app |
| Autofill one-tap | Su Android, un pulsante apre la vostra app e consegna il codice | Richiede `package_name` e `signature_hash` in `supported_apps` |
| Zero-tap | Nessun pulsante; il client WhatsApp invia il codice in broadcast alla vostra app | Solo Android; occorre accettare i termini zero-tap di Meta |

La documentazione di Meta osserva inoltre che da iOS 26 in poi i suggerimenti della tastiera offrono la compilazione automatica senza integrazione, e che gli utenti di piattaforme senza zero-tap ricevono un pulsante per copiare il codice. Potete impostare una scadenza con `code_expiration_minutes`, e l’API di anteprima accetta valori da 1 a 90 minuti. Confrontate i canali in [OTP su WhatsApp o via SMS](/it/blog/whatsapp-otp-vs-sms-otp/).

## Esempio pratico: il login di un’app di ride-hailing

“Qafila Rides” (fittizia) ha un’app Android, un’app iOS e un sito mobile su `qafila.example`.

1. L’app Android avvia SMS Retriever quando l’utente tocca “Invia codice”.
2. Il backend genera un codice di sei cifre, valido per qualche minuto, e invia il messaggio di tre righe visto sopra tramite l’API SMS.
3. Android consegna il messaggio all’app. iOS propone il codice sopra la tastiera. Sul sito mobile, Safari lo suggerisce e Chrome lo compila tramite WebOTP.
4. Il server valida il codice una sola volta, rifiuta riutilizzi e codici scaduti e limita le richieste.
5. Se l’SMS non viene confermato entro un breve timeout, il backend propone un template di autenticazione WhatsApp come seconda via.

## Quali sono gli errori più comuni?

- **Codice non isolato.** Altri numeri (telefono, prezzo, data) accanto al codice confondono il rilevamento. Usate un solo codice per messaggio.
- **Hash sbagliato.** L’hash segue il certificato di firma. Un hash ricavato da una chiave di debug non corrisponde a una build di produzione.
- **Dominio non corrispondente.** `@example.com` deve corrispondere al sito o al dominio associato, altrimenti iOS e WebOTP non propongono il codice.
- **Ultima riga rovinata.** Qualsiasi cosa dopo `#code`, uno spazio mancante o spazi dentro il dominio rompono il formato.
- **Messaggio troppo lungo o troppo carico di Unicode,** che supera il limite di 140 byte del Retriever.
- **Ascolto avviato troppo tardi.** La User Consent API ignora i messaggi ricevuti prima del proprio avvio.
- **Usare la compilazione automatica come sicurezza.** È una comodità. Continuate a validare lato server, a far scadere i codici e a limitare i tentativi, e tenete d’occhio le [frodi da SMS pumping](/it/blog/sms-pumping-fraud-prevention/).
- **Ambito.** Questa guida copre il comportamento documentato al momento della stesura. Le regole delle piattaforme cambiano, quindi controllate le fonti collegate prima del rilascio.

Per la formulazione dei messaggi e la scelta della scadenza, vedi la nostra [guida ai messaggi OTP e di autenticazione](/it/blog/otp-authentication-messages-guide/).

## Come vi aiuta OmniChannels.ai

OmniChannels.ai invia OTP tramite SMS e WhatsApp sulla connettività diretta agli operatori di BroadNet, così potete controllare il testo esatto del messaggio da cui dipende il vostro formato di compilazione automatica. I template WhatsApp coprono l’autenticazione con copia codice, one-tap e zero-tap. Il fallback tra canali, per esempio prima WhatsApp e poi SMS, si configura per caso d’uso, e gli stati di consegna arrivano in un unico formato webhook. Consultate la [documentazione dell’API SMS](/developers/sms/), la [documentazione dell’API WhatsApp](/developers/whatsapp/) e la [soluzione OTP](/it/solutions/otp-notifications/).
