SMS-авторизация в приложении: как сделать вход по коду в Казахстане
Как устроен вход по SMS в приложении в Казахстане: SMS-шлюзы, стоимость, защита от накрутки SMS, WhatsApp-коды, вход через Apple и Google, правила Apple.
Вход по SMS-коду устроен так: пользователь вводит номер телефона, ваш сервер генерирует одноразовый код и отправляет его через SMS-шлюз, пользователь вводит код, сервер проверяет его и выдаёт токен сессии. В Казахстане это самый привычный способ входа, потому что номер телефона есть у всех, а пароли никто не любит. Главное, о чём нужно подумать заранее: стоимость каждой SMS, защита от накрутки отправок и запасные способы входа.
Разберём схему, стоимость, защиту и альтернативы, включая правила Apple о входе через сторонние сервисы.
Как работает вход по SMS
- Пользователь вводит номер в формате +7. Приложение проверяет формат ещё до отправки.
- Приложение отправляет номер на ваш сервер. Сервер проверяет лимиты: сколько кодов уже ушло на этот номер, с этого устройства и IP.
- Сервер генерирует случайный код из 4-6 цифр, сохраняет его хеш и срок жизни, обычно несколько минут.
- Сервер передаёт текст с кодом SMS-шлюзу по API, шлюз доставляет сообщение через операторов.
- Пользователь вводит код. На iOS система сама предлагает код из SMS над клавиатурой, если поле ввода помечено как одноразовый код. На Android для этого есть SMS Retriever API и SMS User Consent API.
- Сервер сверяет код, ограничивает число неверных попыток и выдаёт токены доступа.
Код никогда не генерируется и не проверяется на телефоне. Всё, что происходит в приложении, можно подделать. Подробнее о схемах входа и токенах в статье про OAuth-авторизацию в приложении.
SMS-шлюзы: как выбрать
SMS-шлюз это сервис, который принимает ваш запрос по API и доставляет сообщение абонентам операторов. В Казахстане работают как местные шлюзы, так и международные сервисы, а также облачные решения вроде Firebase Authentication с встроенной отправкой SMS. Критерии выбора:
- Доставка на всех операторов Казахстана и скорость доставки. Код, который приходит через минуту, теряет пользователей.
- Буквенное имя отправителя. Сообщение от названия компании вызывает больше доверия, чем от случайного номера. Регистрация имени у операторов требует времени и документов.
- Тип сообщений. Операторы делят SMS на транзакционные, сервисные и рекламные, и тарифы для них разные. Коды входа относятся к служебным.
- Отчёты о доставке по каждому сообщению, чтобы разбирать жалобы «код не пришёл».
- Защита от накрутки на стороне шлюза и лимиты расходов.
- Договор и оплата в тенге с закрывающими документами для бухгалтерии.
Сколько стоит SMS-авторизация
Стоимость одной SMS в Казахстане зависит от шлюза, оператора, типа сообщения и объёма. По порядку величины это от нескольких до нескольких десятков тенге за сообщение, актуальные цены смотрите в прайсах шлюзов на момент подключения. Международные сервисы обычно дороже местных для казахстанских номеров.
Посчитайте бюджет заранее. Если у вас 10 000 входов в месяц и часть пользователей запрашивает код повторно, отправок будет больше, чем входов. Сократить расходы помогают:
- долгая сессия: пользователь входит по SMS один раз, дальше работает токен обновления;
- вход по Face ID или отпечатку пальца после первого входа: код по SMS нужен только на новом устройстве или после выхода из аккаунта;
- отказ от SMS при каждом открытии приложения: подтверждение по коду оставьте для чувствительных действий, например смены номера или вывода бонусов;
- таймер повторной отправки 30-60 секунд;
- альтернативные каналы доставки кода, о них ниже.
Защита от накрутки SMS
Накрутка SMS (SMS pumping) это вид мошенничества, при котором злоумышленники массово запрашивают коды на подконтрольные им номера, часто зарубежные, и получают долю от стоимости трафика. Для владельца приложения это выглядит как внезапный счёт от шлюза за тысячи сообщений, которые никто не вводил. Как защититься:
| Мера | Что даёт |
|---|---|
| Лимиты на номер, устройство и IP | Например, не больше нескольких кодов на номер за час и отдельный лимит на IP |
| Разрешённые страны | Если клиенты только в Казахстане, отправляйте коды только на номера +7 нужных операторов |
| Проверка подлинности приложения | App Attest на iOS и Play Integrity на Android подтверждают, что запрос пришёл из вашего приложения |
| Капча при подозрительной активности | Отсекает скрипты, которые бьют по API напрямую |
| Дневной лимит расходов | При превышении отправка останавливается, приходит уведомление |
| Мониторинг конверсии кода | Если коды отправляются, но не вводятся, это признак атаки |
В Firebase Authentication для этого есть настройка разрешённых регионов для SMS и защита на базе reCAPTCHA. Больше мер защиты API собрано в статье о безопасности мобильного приложения.
Альтернативы SMS
- Код в WhatsApp. В Казахстане WhatsApp есть почти у всех, и код через WhatsApp Business Platform часто доходит надёжнее. Meta тарифицирует такие сообщения, цены для Казахстана смотрите в актуальном прайсе. Оставьте SMS запасным каналом для тех, у кого нет WhatsApp.
- Код в Telegram. Подходит, если ваша аудитория активно пользуется Telegram, но как единственный канал рискован.
- Подтверждение звонком. Код передаётся последними цифрами входящего номера. Доступность и цены зависят от провайдера.
- Вход через Apple и Google. Бесплатен для вас, быстрый для пользователя, но не даёт номер телефона, если он нужен для доставки или бонусов.
- Почта с кодом. Дешевле SMS, подходит для B2B и сервисов, где почта рабочий канал.
Правило Apple про вход через сторонние сервисы
Правило 4.8 App Review Guidelines говорит: если приложение использует сторонний или социальный вход (Google, Facebook и подобные) для основного аккаунта, оно должно предложить равноценный вариант входа, который собирает только имя и почту, позволяет скрыть почту и не отслеживает действия пользователя для рекламы без согласия. На практике этому соответствует Sign in with Apple.
Что это значит для казахстанского приложения:
- если вход только по SMS-коду в ваш собственный аккаунт, дополнительный вход не требуется: это ваша система учётных записей;
- если вы добавили кнопку «Войти через Google», рядом нужен равноценный вариант, обычно «Войти через Apple»;
- если используется Sign in with Apple, при удалении аккаунта нужно отозвать токены пользователя.
Правила периодически уточняются, поэтому перед отправкой сверьтесь с актуальной редакцией. Обзор других требований есть в статье требования Apple к приложениям.
Удобный экран входа: что проверить
Даже идеальная серверная часть не спасёт, если экран входа неудобный. Пользователь приложения доставки в Шымкенте хочет заказать обед, а не разбираться с формами. Проверьте несколько деталей:
- поле номера сразу открывает цифровую клавиатуру, а +7 уже подставлен;
- номер можно вставить в любом формате: с восьмёркой, пробелами, скобками, и приложение само приведёт его к нужному виду;
- код подставляется автоматически из SMS на iOS и Android, вручную его вводят только в крайнем случае;
- таймер повторной отправки виден, а после него появляется выбор канала: SMS, WhatsApp или звонок;
- понятные сообщения об ошибках: «Неверный код, осталось 2 попытки», а не «Ошибка 401»;
- кнопка «Изменить номер» на экране ввода кода, если человек ошибся в цифре.
Такие мелочи прямо влияют на то, сколько людей дойдёт от установки до первого заказа. Про работу с первыми экранами подробнее в статье об онбординге в приложении.
Частые ошибки
- Нет лимитов на отправку. Первая же атака превращается в крупный счёт от шлюза.
- Код проверяется в приложении. Сервер присылает код в ответе API, и его видно любому, кто смотрит трафик.
- Бесконечное число попыток ввода. Четырёхзначный код перебирается за минуты.
- Нет тестового номера для проверяющих. Apple и Google не могут войти в приложение и отклоняют его. Дайте тестовый номер с постоянным кодом, который работает только для него.
- Короткая сессия. Пользователь вводит SMS-код каждый день, растут и раздражение, и расходы.
Частые вопросы
Нужен ли Sign in with Apple, если в приложении только вход по SMS?
По правилу 4.8 дополнительный вариант входа нужен, когда приложение использует сторонний или социальный вход для основного аккаунта. Если вход только по SMS в ваш собственный аккаунт, это не требуется, но сверяйтесь с актуальной редакцией правил.
Сколько стоит одна SMS с кодом в Казахстане?
Порядка от нескольких до нескольких десятков тенге за сообщение в зависимости от шлюза, оператора, типа сообщения и объёма. Точные цены смотрите в прайсах шлюзов на момент подключения.
Как защититься от накрутки SMS?
Ставьте лимиты на номер, устройство и IP, разрешайте отправку только на нужные страны, проверяйте подлинность приложения через App Attest и Play Integrity и задайте дневной лимит расходов.
Можно ли отправлять код входа в WhatsApp вместо SMS?
Да, через WhatsApp Business Platform. Такие сообщения платные по тарифам Meta, поэтому оставьте SMS запасным каналом для пользователей без WhatsApp.
Какой тестовый доступ дать проверяющим Apple и Google?
Выделите тестовый номер телефона с постоянным кодом, который работает только для этого номера, и укажите его в комментарии для проверки.
Сделаем вход по SMS надёжным и недорогим
Команда applications.kz настраивает вход по SMS и WhatsApp-кодам, вход через Apple и Google, защиту от накрутки и биометрию в приложениях на iOS, Android и Flutter. Подробнее на странице разработки мобильных приложений. Напишите через форму контактов или в WhatsApp +7 707 928 13 15, смету подготовим бесплатно за 24 часа.