os códigos de SMS de un solo uso pueden autocompletarse si el mensaje tiene el formato adecuado para la plataforma. En Android, el SMS Retriever API lee un mensaje que no supere los 140 bytes, contenga el código e incluya un hash de 11 caracteres que identifique su aplicación. En iOS y en Safari, marque la entrada con autocomplete="one-time-code" (textContentType oneTimeCode en aplicaciones nativas) y el teclado sugerirá el código. En la web, el WebOTP API lee un mensaje cuya última línea es @your-domain #code. Una sola plantilla puede satisfacer los tres casos.
Puntos clave
- El autocompletado elimina el cambio de aplicación que hace que los usuarios se pierdan entre la recepción y la escritura del código.
- Android SMS Retriever: mensaje de máximo 140 bytes, que contenga el código y su hash de aplicación de 11 caracteres; no requiere permiso de SMS.
- Android SMS User Consent: sin hash; el mensaje debe contener un código alfanumérico de 4 a 10 caracteres con al menos un número; el usuario pulsa para permitirlo.
- iOS y Safari: autocomplete="one-time-code" en la entrada; la última línea vinculada al dominio permite la sugerencia de Safari.
- WebOTP: última línea @domain #code, sin esquema, puerto o ruta; compatible con Chrome en Android y escritorio.
¿Por qué es importante el autocompletado de OTP?
Cada paso entre "código enviado" y "código introducido" provoca la pérdida de usuarios: cambiar a la aplicación de mensajes, memorizar seis dígitos y volver a la aplicación. El autofill convierte ese proceso en un simple toque. También reduce los errores de escritura y, con códigos vinculados al dominio, dificulta que se engañe al usuario para que introduzca un código en un sitio web fraudulento. No soluciona la entrega: el código debe llegar rápido, así que combine el autofill con una ruta rápida y un método de respaldo. Consulte las mejores prácticas de entrega de OTP.
¿Cómo funciona el Android SMS Retriever API?
El SMS Retriever API permite que su aplicación Android reciba el mensaje de verificación sin solicitar permiso de lectura para SMS. La documentación de Google establece tres reglas para el mensaje:
- que no supere los 140 bytes;
- que contenga la contraseña de un solo uso que la aplicación devuelve a su servidor;
- que incluya una cadena hash de 11 caracteres que identifique su aplicación.
El hash se calcula a partir del nombre del paquete de su aplicación y su certificado de firma: se añade el nombre del paquete a la forma hexadecimal del certificado, se obtiene el SHA-256, se codifica en base64 y se conservan los primeros 11 caracteres. Las versiones de depuración (debug) y de lanzamiento (release) suelen estar firmadas con claves distintas, por lo que tienen hashes diferentes. Su servidor añade el hash correcto al generar el mensaje.
¿Qué es el SMS User Consent API?
Cuando no puede incluir un hash de la aplicación en el mensaje, por ejemplo porque la plantilla se comparte con otros canales, el SMS User Consent API de Android muestra al usuario un aviso para permitir que su aplicación lea un mensaje. Según Google, el mensaje debe contener una cadena alfanumérica de 4 a 10 caracteres con al menos un número y, si ha especificado un remitente, debe provenir de dicho remitente. El API permanece activo durante unos cinco minutos tras su inicio y luego expira.
¿Cómo funciona el autofill de OTP en iOS?
iOS ofrece el autorrelleno de códigos de seguridad desde el teclado. En una aplicación nativa, establezca el textContentType del campo de texto en oneTimeCode; en una página web, añada autocomplete="one-time-code" al campo de entrada. Cuando llega un SMS coincidente, el código aparece sobre el teclado y el usuario solo tiene que pulsarlo. Safari no implementa el WebOTP JavaScript API, pero la documentación de WebOTP de Chrome señala que, con la anotación de autocompletado, el teclado predeterminado sugiere el código si el SMS sigue el formato vinculado al dominio que se muestra a continuación (iOS 14 y macOS Big Sur o versiones posteriores).
¿Cuál es el formato de mensaje WebOTP?
El WebOTP API permite que una página web lea el código con navigator.credentials.get({ otp: { transport: ['sms'] } }). El SMS debe comenzar con texto legible para humanos y terminar con una última línea con este formato:
Your BroadNet code is 482913. @www.example.com #482913- La última línea comienza con @ y el dominio de la página que solicita el código.
- Un espacio sencillo, seguido de # y el código.
- Sin esquema, puerto o ruta en el dominio, y sin espacios en su interior.
- La parte legible para humanos también debe contener el código, para las personas que lean el mensaje.
Mantenga siempre autocomplete="one-time-code" en el campo de entrada, para que los navegadores sin WebOTP también ofrezcan el código.
¿Puede funcionar una misma plantilla SMS en todas las plataformas?
Sí, siempre que se mantenga dentro del límite de Android bytes y las líneas sigan el orden correcto. Una plantilla combinada:
Your BroadNet code is 482913. Do not share it.FA+9qCX9VSu @www.example.com #482913| Plataforma | ¿Qué lee el código? | Requisitos del mensaje |
|---|---|---|
| aplicación Android | SMS Retriever API | El código y el hash de la aplicación de 11 caracteres; máximo 140 bytes |
| aplicación Android (sin hash) | API de SMS User Consent | Un código alfanumérico de 4 a 10 caracteres con al menos un número |
| aplicación iOS | Autocompletado de código de seguridad (oneTimeCode) | Un código reconocible; se recomienda una línea vinculada al dominio |
| Safari (iOS, macOS) | autocomplete="one-time-code" | Última línea @domain #code |
| Chrome (Android, escritorio) | WebOTP API | Última línea @domain #code |
El hash mostrado es un marcador de posición: use el valor de su propia aplicación. Mantenga la plantilla en el conjunto de caracteres GSM-7 para que se mantenga en un solo segmento; un emoji o una letra con tilde cambia todo el mensaje a Unicode, lo que reduce el espacio a la mitad y puede romper el presupuesto de 140 bytes. Consulte la codificación y segmentación SMS.
¿Cómo se envían estos mensajes con BroadNet?
Construya el mensaje en su servidor y envíelo a través de la OTP API o la SMS API; los saltos de línea forman parte del texto del mensaje. El producto OTP de BroadNet utiliza rutas de respaldo a través de SMS, WhatsApp, voz y Flash Call cuando un código no llega, y MyOTP.App envía códigos mediante SMS, WhatsApp o Telegram desde una sola cuenta. Para todo el flujo, consulte cómo construir un flujo de OTP y nuestra guía de verificación OTP multicanal.
Preguntas frecuentes
¿Por qué mi aplicación Android no lee el OTP SMS?
Normalmente, el hash de la aplicación en el mensaje no coincide con la compilación (las claves de depuración y de lanzamiento son distintas), el mensaje es superior a 140 bytes o el receptor se inició después de que llegara el mensaje.
¿Necesito permiso de SMS para el autocompletado de códigos en Android?
No. Tanto la API de SMS Retriever como la API de SMS User Consent funcionan sin el permiso de lectura de SMS.
¿Cómo activo el autocompletado de OTP en iOS?
Configure textContentType como oneTimeCode en una aplicación nativa o añada autocomplete="one-time-code" al campo de entrada en una página web.
¿Cuál es el formato de la SMS de WebOTP?
Primero el texto legible para humanos, luego una última línea con @ seguido de su dominio, un espacio, # y el código; por ejemplo, @www.example.com #482913.
¿Funciona WebOTP en Safari?
Safari no es compatible con el JavaScript API de WebOTP, pero con autocomplete="one-time-code" su teclado sugiere códigos de mensajes con el formato vinculado al dominio.
¿Puedo usar una sola plantilla para Android, iOS y web?
Sí: el código en el texto, el hash de la aplicación en su propia línea y la línea vinculada al dominio al final, todo dentro de los 140 bytes.
Las reglas de la plataforma se consultaron el 28 de septiembre de 2026 en la documentación de SMS Retriever y SMS User Consent de Google (developers.google.com) y en la documentación de WebOTP de Chrome (developer.chrome.com). Consulte nuestros estándares editoriales.
