BroadNet
La revistaIngeniería
Ingeniería

Autocompletado de SMS OTP: Android SMS Retriever, iOS one-time-code y el formato de mensaje WebOTP

Los códigos SMS pueden autocompletarse en Android, iOS y la web si el mensaje tiene el formato adecuado: un hash de aplicación de 11 caracteres para el SMS Retriever de Android, autocomplete="one-time-code" para iOS y Safari, y una última línea de @your-domain #code para WebOTP. Aquí tiene cada formato y una plantilla que funciona para los tres.

8 min de lectura
Ingeniería · Número 40
8 min de lectura

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.

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:

snippet
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:

snippet
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 AndroidSMS Retriever APIEl 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 ConsentUn código alfanumérico de 4 a 10 caracteres con al menos un número
aplicación iOSAutocompletado 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.

¿Te ha resultado útil?

Cómo redactamos y revisamos el contenido

Escrito por

Equipo editorial de BroadNet

El equipo editorial publica el blog de BroadNet. Los artículos se escriben con los equipos de BroadNet de asuntos regulatorios, producto, ingeniería, investigación del sector y soluciones para operadores, y se revisan según nuestras normas editoriales.

La revista, por correo electrónico

Un ensayo al mes. Nada más.

Suscríbete y te enviaremos el próximo artículo —sobre ingeniería, normativa o industria— el mismo día de su publicación. Sin campañas de goteo, sin promociones de productos, sin compartir con terceros. Cancela tu suscripción con un solo clic.

Enviamos un correo al mes. Puede darse de baja cuando quiera. Consulte nuestra política de privacidad.

Lo que obtendrás
  • Texto extenso, no contenido para generar enlaces.
    De seis a once minutos de escritura concentrada en un solo tema.
  • Escrito por operadores
    Ingenieros, responsables de asuntos regulatorios y redacción de productos internos.
  • Consciente de la región
    Perspectiva sobre reguladores, operadores y combinación de canales desde la perspectiva de la región MENA.
  • Una vez al mes
    Sin campañas de goteo. Un ensayo cuando haya alguno para compartir.
Deja de leer. Empieza a enviar.

La mayor parte de lo que escribimos lo aprendimos durante la producción.

Si este artículo te ha hecho asentir con la cabeza, deberíamos hablar. Menciona el caso de uso, los volúmenes, los mercados; te ofreceremos opciones de enrutamiento, precios y un cliente de referencia con el que podrás contactar.

$ curl -X POST https://api.broadnet.me/sms/sendSms