BroadNet
ЖурналИнженерия
Инженерия

Автозаполнение SMS OTP: Android SMS Retriever, iOS one-time-code и формат сообщения WebOTP

Коды SMS могут заполняться автоматически на Android, iOS и в вебе, если сообщение отформатировано соответствующим образом: 11-символьный хэш приложения для Android SMS Retriever, autocomplete="one-time-code" для iOS и Safari, а также последняя строка с @your-domain #code для WebOTP. Ниже приведены форматы и единый шаблон, подходящий для всех трех платформ.

8 мин чтения
Инженерия · Выпуск 40
8 мин чтения

дноразовые коды SMS могут заполняться автоматически, если сообщение отформатировано под платформу. На Android SMS Retriever API считывает сообщение объемом не более 140 байт, которое содержит код и 11-символьный хэш, идентифицирующий ваше приложение. В iOS и Safari для поля ввода указывается autocomplete="one-time-code" (textContentType oneTimeCode в нативных приложениях), после чего клавиатура предлагает код. В вебе WebOTP API считывает сообщение, последняя строка которого — @your-domain #code. Один шаблон может удовлетворить требования всех трех платформ.

Основные выводы

  • Автозаполнение избавляет от необходимости переключаться между приложениями, на чем пользователи часто теряются в процессе получения и ввода кода.
  • Android SMS Retriever: сообщение объемом не более 140 байт, содержащее код и ваш 11-символьный хэш приложения; разрешение SMS не требуется.
  • Android SMS User Consent: без хэша; сообщение должно содержать буквенно-цифровой код от 4 до 10 символов, содержащий как минимум одну цифру; пользователь нажимает для подтверждения.
  • iOS и Safari: autocomplete="one-time-code" на поле ввода; привязанная к домену последняя строка позволяет Safari предлагать код.
  • WebOTP: последняя строка — @domain #code, без схемы, порта или пути; поддерживается в Chrome на Android и десктопах.

Почему важно автозаполнение OTP?

Каждый шаг между «код отправлен» и «код введен» приводит к потере пользователей: переключение в приложение сообщений, запоминание шести цифр, возврат в приложение. Функция Autofill превращает это в одно касание. Она также снижает количество ошибок при вводе, а благодаря кодам, привязанным к домену, усложняет попытки обманом заставить пользователя ввести код на фишинговом сайте. Это не решает проблему доставки: код по-прежнему должен приходить быстро, поэтому используйте Autofill в сочетании с быстрым маршрутом и резервным каналом. Ознакомьтесь с лучшими практиками доставки OTP.

Как работает Android SMS Retriever API?

SMS Retriever API позволяет вашему приложению Android получать проверочное сообщение без запроса разрешения на SMS. Документация Google устанавливает три правила для сообщения:

  • длина не более 140 байт;
  • наличие одноразового пароля, который приложение отправляет обратно на ваш сервер;
  • наличие 11-символьной хэш-строки, идентифицирующей ваше приложение.

Хэш вычисляется на основе имени пакета вашего приложения и его сертификата подписи: к шестнадцатеричной форме сертификата добавляется имя пакета, затем берется SHA-256, кодируется в base64, и используются первые 11 символов. Debug и release сборки обычно подписываются разными ключами, поэтому у них разные хэши. Ваш сервер добавляет нужный хэш при формировании сообщения.

Если вы не можете добавить хэш приложения в сообщение (например, если шаблон используется для других каналов), SMS User Consent API от Android показывает пользователю запрос на разрешение приложению прочитать одно сообщение. Согласно Google, сообщение должно содержать буквенно-цифровую строку длиной от 4 до 10 символов, содержащую как минимум одну цифру, и, если вы указали имя отправителя, приходить именно от этого отправителя. API прослушивает входящие сообщения в течение примерно пяти минут после запуска, а затем завершает работу по таймауту.

Как работает Autofill OTP на iOS?

iOS предлагает автозаполнение одноразового пароля прямо с клавиатуры. В нативном приложении установите textContentType текстового поля в значение oneTimeCode; на веб-странице добавьте autocomplete="one-time-code" к полю ввода. Когда приходит соответствующее SMS, код отображается над клавиатурой, и пользователю достаточно нажать на него. Safari не поддерживает WebOTP JavaScript API, однако в документации WebOTP Chrome указано, что при наличии аннотации autocomplete стандартная клавиатура предложит код, если SMS соответствует формату домена, приведенному ниже (iOS 14 и macOS Big Sur или более поздние версии).

Что такое формат сообщения WebOTP?

Формат WebOTP API позволяет веб-странице считывать код с помощью navigator.credentials.get({ otp: { transport: ['sms'] } }). SMS должен начинаться с понятного человеку текста и заканчиваться последней строкой в следующем формате:

snippet
Your BroadNet code is 482913.
@www.example.com #482913
  • Последняя строка начинается с @ и домена страницы, запрашивающей код.
  • Один пробел, затем # и сам код.
  • В домене не должно быть схемы, порта или пути, а также пробелов внутри него.
  • Понятная человеку часть также должна содержать код для тех, кто читает сообщение.

Всегда оставляйте autocomplete="one-time-code" в поле ввода, чтобы браузеры без WebOTP все равно предлагали код.

Может ли один шаблон SMS работать на всех платформах?

Да, если он не превышает лимит Android байт и строки расположены в правильном порядке. Пример комбинированного шаблона:

snippet
Your BroadNet code is 482913. Do not share it.
FA+9qCX9VSu
@www.example.com #482913
ПлатформаЧто считывает кодЧто требуется для сообщения
приложение AndroidSMS Retriever APIКод и хэш вашего приложения из 11 символов; максимум 140 байт
приложение Android (без хэша)API SMS User ConsentБуквенно-цифровой код от 4 до 10 символов, содержащий как минимум одну цифру
приложение iOSАвтозаполнение кода безопасности (oneTimeCode)Узнаваемый код; рекомендуется привязка к домену
Safari (iOS, macOS)autocomplete="one-time-code"Последняя строка @domain #code
Chrome (Android, десктоп)WebOTP APIПоследняя строка @domain #code

Показанный хеш является примером: используйте значение вашего собственного приложения. Сохраняйте шаблон в наборе символов GSM-7, чтобы сообщение оставалось одним сегментом; эмодзи или акцентированные буквы переводят всё сообщение в Unicode, что сокращает объем вдвое и может привести к превышению лимита в 140 байт. См. кодирование и сегментацию SMS.

Как отправить такие сообщения через BroadNet?

Формируйте сообщение на своем сервере и отправляйте его через OTP API или SMS API; символы переноса строки являются частью текста сообщения. Продукт OTP от BroadNet использует резервные каналы SMS, WhatsApp, voice и Flash Call, если код не доставлен, а MyOTP.App позволяет отправлять коды через SMS, WhatsApp или Telegram с одного аккаунта. Чтобы полностью настроить процесс, изучите как построить поток OTP и наше руководство по многоканальной OTP верификации.

Часто задаваемые вопросы

Почему мое приложение Android не считывает OTP SMS?

Обычно это происходит из-за того, что хеш приложения в сообщении не совпадает со сборкой (ключи debug и release различаются), сообщение длиннее 140 байт или слушатель (listener) был запущен уже после получения сообщения.

Нужно ли мне разрешение SMS для автозаполнения кодов в Android?

Нет. SMS Retriever API и SMS User Consent API работают без разрешения на чтение SMS.

Как включить автозаполнение OTP на iOS?

Установите textContentType в значение oneTimeCode в нативном приложении или добавьте autocomplete="one-time-code" к полю ввода на веб-странице.

Каков формат WebOTP SMS?

Сначала идет текст, понятный человеку, затем последняя строка, начинающаяся с @ и вашего домена, пробел, # и код, например: @www.example.com #482913.

Работает ли WebOTP в Safari?

Safari не поддерживает WebOTP JavaScript API, но при использовании autocomplete="one-time-code" клавиатура предлагает коды из сообщений в формате, привязанном к домену.

Могу ли я использовать один шаблон для Android, iOS и веб-версии?

Да: код в тексте, хэш приложения в отдельной строке и строка с привязкой к домену в конце — всё в пределах 140 байт.

Правила платформы изложены 28 сентября 2026 года в документации SMS Retriever и SMS User Consent компании Google (developers.google.com) и в документации WebOTP Chrome (developer.chrome.com). Ознакомьтесь с нашими редакционными стандартами.

Была ли эта информация полезна?

Как мы готовим и проверяем материалы

Автор:

Редакционная группа BroadNet

Редакционная группа публикует блог BroadNet. Статьи пишутся вместе с командами BroadNet по вопросам регулирования, продукту, инженерии, отраслевым исследованиям и решениям для операторов и проверяются по нашим редакционным стандартам.

Продолжайте читать

Ещё три статьи из журнала.

Посмотреть все эссе
В
Продукт

Всё, что вам нужно знать о SMS верификации

Как SMS подтверждение ( OTP) подтверждает личность пользователя: как работает поток кода, ограничения для стационарных телефонов и резервный вариант для голосовой связи, вопросы конфиденциальности и выбор SMS API.

Редакционная группа BroadNet
2m
П
Продукт

Правильная доставка одноразовых паролей — задержка, резервный вариант и конверсия.

Одноразовый пароль, который приходит с опозданием или не приходит вовсе, означает неудачную попытку входа в систему и потерю пользователя. Инженерные решения, обеспечивающие быструю, надежную и высокоэффективную доставку OTP-кодов.

Редакционная группа BroadNet
9m
К
Инженерия

Как отправить SMS из кода: Python, PHP, Node.js, Java, Go и C# с помощью одного REST вызова

Отправка SMS из кода — это один аутентифицированный HTTPS POST-запрос: Bearer токен, JSON тело с именем отправителя, номером получателя, текстом сообщения и типом сообщения, а также ID сообщения в ответ. Ниже приведены примеры этого же запроса на Python, PHP, Node.js, Java, Go и C#, а также обработка ошибок и рекомендации для промышленной эксплуатации.

Редакционная группа BroadNet
9m
Журнал, по электронной почте

Одно эссе в месяц. Больше ничего.

Подпишитесь, и мы вышлем вам следующий материал — по инженерии, регулированию или промышленности — в день его отправки. Никаких рассылок, никаких рекламных предложений, никакого обмена информацией с третьими лицами. Отписаться можно одним щелчком мыши.

Одно письмо в месяц. Отписаться можно в любой момент. См. нашу политику конфиденциальности.

Что вы получите
  • Подробный текст, а не призыв к действию.
    Шесть-одиннадцать минут сосредоточенного письма на одну тему.
  • Написано операторами
    В штате компании работают инженеры, специалисты по регулированию и разработчики продуктов.
  • Регионально-зависимый
    Взгляд со стороны региона MENA на регулирующие органы, операторов и структуру каналов сбыта.
  • Раз в месяц
    Никаких рассылок по частям. Одно эссе, когда есть чем поделиться.
Прекратите читать. Начинайте отправлять.

Большую часть того, что мы пишем, мы освоили в процессе производства.

Если эта статья вас заинтересовала, нам, вероятно, стоит поговорить. Расскажите о сценарии использования, объемах, рынках — мы предложим маршруты, цены и контактные данные клиента, которому вы сможете позвонить.

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