codici monouso SMS possono essere inseriti automaticamente se il messaggio è formattato per la piattaforma. Su Android, il SMS Retriever API legge un messaggio che non superi i 140 byte, contenga il codice e includa un hash di 11 caratteri che identifichi la vostra app. Su iOS e Safari, contrassegnate l'input con autocomplete="one-time-code" (textContentType oneTimeCode nelle app native) e la tastiera suggerirà il codice. Sul web, il WebOTP API legge un messaggio la cui ultima riga è @your-domain #code. Un unico modello può soddisfare tutti e tre i casi.
Punti chiave
- L'autocompletamento elimina il passaggio tra le app, evitando che gli utenti abbandonino il processo tra la ricezione e l'inserimento del codice.
- Android SMS Retriever: messaggio di al massimo 140 byte, contenente il codice e l'hash app di 11 caratteri; non è richiesta l'autorizzazione SMS.
- Android SMS User Consent: nessun hash; il messaggio deve contenere un codice alfanumerico di 4–10 caratteri con almeno un numero; l'utente tocca per consentire.
- iOS e Safari: autocomplete="one-time-code" sull'input; l'ultima riga legata al dominio abilita il suggerimento di Safari.
- WebOTP: ultima riga @domain #code, senza schema, porta o percorso; supportato su Chrome su Android e desktop.
Perché l'autocompletamento OTP è importante?
Ogni passaggio tra "codice inviato" e "codice inserito" comporta una perdita di utenti: passare all'app di messaggistica, memorizzare le sei cifre, tornare indietro. L'autocompletamento trasforma tutto questo in un semplice tocco. Riduce inoltre gli errori di digitazione e, grazie ai codici legati al dominio, rende più difficile ingannare l'utente inducendolo a inserire un codice su un sito contraffatto. Non risolve i problemi di consegna: il codice deve comunque arrivare rapidamente, quindi abbina l'autocompletamento a una rotta veloce e a un sistema di fallback. Consulta le best practice di consegna OTP.
Come funziona il Android SMS Retriever API?
Il SMS Retriever API consente alla tua app Android di ricevere il messaggio di verifica senza richiedere il permesso di SMS per la lettura. La documentazione di Google stabilisce tre regole per il messaggio:
- non deve superare i 140 byte;
- deve contenere la password monouso che l'app invia al tuo server;
- deve includere una stringa hash di 11 caratteri che identifica la tua app.
L'hash viene calcolato dal nome del pacchetto della tua app e dal suo certificato di firma: si aggiunge il nome del pacchetto alla forma esadecimale del certificato, si prende il SHA-256, lo si codifica in base64 e si mantengono i primi 11 caratteri. Le build di debug e di rilascio sono solitamente firmate con chiavi diverse, quindi hanno hash differenti. Il tuo server aggiunge l'hash corretto durante la creazione del messaggio.
Cos'è il SMS User Consent API?
Quando non è possibile inserire l'hash dell'app nel messaggio, ad esempio perché il template è condiviso con altri canali, il SMS User Consent API di Android mostra all'utente un prompt per consentire alla tua app di leggere un messaggio. Secondo Google, il messaggio deve contenere una stringa alfanumerica di 4–10 caratteri con almeno un numero e, se è stato specificato un mittente, deve provenire da quel mittente. Il API resta in ascolto per circa cinque minuti dopo l'avvio e poi scade.
Come funziona l'autocompletamento OTP su iOS?
iOS offre l'autocompletamento del codice di sicurezza direttamente dalla tastiera. In un'app nativa, impostare l'attributo textContentType del campo di testo su oneTimeCode; su una pagina web, aggiungere autocomplete="one-time-code" all'input. Quando arriva un SMS corrispondente, il codice appare sopra la tastiera e l'utente può toccarlo. Safari non implementa il WebOTP JavaScript API, ma la documentazione WebOTP di Chrome specifica che, con l'annotazione autocomplete, la tastiera predefinita suggerisce il codice se l'SMS segue il formato legato al dominio riportato di seguito (iOS 14 e macOS Big Sur o versioni successive).
Cos'è il formato del messaggio WebOTP?
Il API WebOTP consente a una pagina web di leggere il codice tramite navigator.credentials.get({ otp: { transport: ['sms'] } }). Il SMS deve iniziare con un testo leggibile dall'uomo e terminare con un'ultima riga in questo formato:
Your BroadNet code is 482913. @www.example.com #482913- L'ultima riga inizia con @ seguito dal dominio della pagina che richiede il codice.
- Un singolo spazio, poi # e il codice.
- Nessuno schema, porta o percorso nel dominio, e nessun spazio al suo interno.
- La parte leggibile dall'uomo dovrebbe contenere anche il codice, per le persone che leggono il messaggio.
Mantenere sempre autocomplete="one-time-code" anche nell'input, in modo che i browser senza WebOTP possano comunque offrire il codice.
Un unico template SMS può funzionare su ogni piattaforma?
Sì, purché rimanga entro il limite di Android byte e le righe siano nell'ordine corretto. Un template combinato:
Your BroadNet code is 482913. Do not share it.FA+9qCX9VSu @www.example.com #482913| Piattaforma | Lettore del codice | Requisiti del messaggio |
|---|---|---|
| app Android | SMS Retriever API | Il codice e l'hash dell'app di 11 caratteri; al massimo 140 byte |
| app Android (senza hash) | API SMS User Consent | Un codice alfanumerico di 4–10 caratteri con almeno un numero |
| app iOS | Compilazione automatica del codice di sicurezza (oneTimeCode) | Un codice riconoscibile; si raccomanda una riga legata al dominio |
| Safari (iOS, macOS) | autocomplete="one-time-code" | Ultima riga @domain #code |
| Chrome (Android, desktop) | WebOTP API | Ultima riga @domain #code |
L'hash visualizzato è un segnaposto: utilizzare il valore della propria app. Mantenere il template nel set di caratteri GSM-7 affinché rimanga un unico segmento; un'emoji o una lettera accentata convertono l'intero messaggio in Unicode, dimezzando lo spazio disponibile e rischiando di superare il limite di 140 byte. Consultare codifica e segmentazione SMS.
Come si inviano questi messaggi con BroadNet?
Costruisci il messaggio sul tuo server e invialo tramite il OTP API o il SMS API; gli a capo fanno parte del testo del messaggio. Il prodotto OTP di BroadNet prevede il fallback su SMS, WhatsApp, voce e Flash Call quando un codice non arriva, e MyOTP.App invia i codici tramite SMS, WhatsApp o Telegram da un unico account. Per l'intero flusso, consulta come costruire un flusso OTP e la nostra guida alla verifica multichannel OTP.
Domande frequenti
Perché la mia app Android non legge l'SMS con l'OTP?
Solitamente l'hash dell'app nel messaggio non corrisponde alla build (le chiavi debug e release sono diverse), il messaggio è più lungo di 140 byte o il listener è stato avviato dopo l'arrivo del messaggio.
Ho bisogno del permesso SMS per la compilazione automatica dei codici su Android?
No. Sia il API SMS Retriever che il API SMS User Consent funzionano senza il permesso di lettura SMS.
Come attivo la compilazione automatica OTP su iOS?
Imposta textContentType su oneTimeCode in un'app nativa, oppure aggiungi autocomplete="one-time-code" all'input in una pagina web.
Qual è il formato WebOTP SMS?
Prima il testo leggibile dall'uomo, poi un'ultima riga con @ seguita dal tuo dominio, uno spazio, # e il codice, ad esempio @www.example.com #482913.
WebOTP funziona su Safari?
Safari non supporta il JavaScript API di WebOTP, ma con autocomplete="one-time-code" la tastiera suggerisce i codici dai messaggi nel formato domain-bound.
Posso usare un unico template per Android, iOS e web?
Sì: il codice nel testo, l'app hash su una riga dedicata e la riga domain-bound per ultima, il tutto entro 140 byte.
Le regole della piattaforma sono state consultate il 28 settembre 2026 nella documentazione SMS Retriever e SMS User Consent di Google (developers.google.com) e nella documentazione WebOTP di Chrome (developer.chrome.com). Consulta i nostri standard editoriali.
