дноразовые коды 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?
Если вы не можете добавить хэш приложения в сообщение (например, если шаблон используется для других каналов), 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 должен начинаться с понятного человеку текста и заканчиваться последней строкой в следующем формате:
Your BroadNet code is 482913. @www.example.com #482913- Последняя строка начинается с @ и домена страницы, запрашивающей код.
- Один пробел, затем # и сам код.
- В домене не должно быть схемы, порта или пути, а также пробелов внутри него.
- Понятная человеку часть также должна содержать код для тех, кто читает сообщение.
Всегда оставляйте autocomplete="one-time-code" в поле ввода, чтобы браузеры без WebOTP все равно предлагали код.
Может ли один шаблон SMS работать на всех платформах?
Да, если он не превышает лимит Android байт и строки расположены в правильном порядке. Пример комбинированного шаблона:
Your BroadNet code is 482913. Do not share it.FA+9qCX9VSu @www.example.com #482913| Платформа | Что считывает код | Что требуется для сообщения |
|---|---|---|
| приложение Android | SMS 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). Ознакомьтесь с нашими редакционными стандартами.
