# Автозаполнение 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. Ниже приведены форматы и единый шаблон, подходящий для всех трех платформ.

- Канонический URL: https://www.broadnet.me/ru/blog/sms-otp-autofill-android-ios-web-guide
- Язык: ru
- Последнее обновление: 2026-10-20
- Издатель: BroadNet (https://www.broadnet.me)

- Опубликовано: 2026-09-28
- Автор: BroadNet Editorial Team

Одноразовые коды 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](https://www.broadnet.me/answers/sms-otp-best-practices).

## Как работает 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](https://www.broadnet.me/blog/sms-encoding-segmentation-gsm7-ucs2).

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

Формируйте сообщение на своем сервере и отправляйте его через [OTP API](https://www.broadnet.me/products/otp) или [SMS API](https://www.broadnet.me/products/sms-api); символы переноса строки являются частью текста сообщения. Продукт OTP от BroadNet использует резервные каналы SMS, WhatsApp, voice и Flash Call, если код не доставлен, а [MyOTP.App](https://www.broadnet.me/products/myotp) позволяет отправлять коды через SMS, WhatsApp или Telegram с одного аккаунта. Чтобы полностью настроить процесс, изучите [как построить поток OTP](https://www.broadnet.me/answers/how-to-build-otp-flow) и наше [руководство по многоканальной OTP верификации](https://www.broadnet.me/blog/multichannel-otp-verification-api-2026).

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

### Почему мое приложение 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). Ознакомьтесь с нашими [редакционными стандартами](https://www.broadnet.me/about/editorial-standards).
