Вход по SMS-коду устроен так: пользователь вводит номер телефона, ваш сервер генерирует одноразовый код и отправляет его через SMS-шлюз, пользователь вводит код, сервер проверяет его и выдаёт токен сессии. В Казахстане это самый привычный способ входа, потому что номер телефона есть у всех, а пароли никто не любит. Главное, о чём нужно подумать заранее: стоимость каждой SMS, защита от накрутки отправок и запасные способы входа.

Разберём схему, стоимость, защиту и альтернативы, включая правила Apple о входе через сторонние сервисы.

Как работает вход по SMS

  1. Пользователь вводит номер в формате +7. Приложение проверяет формат ещё до отправки.
  2. Приложение отправляет номер на ваш сервер. Сервер проверяет лимиты: сколько кодов уже ушло на этот номер, с этого устройства и IP.
  3. Сервер генерирует случайный код из 4-6 цифр, сохраняет его хеш и срок жизни, обычно несколько минут.
  4. Сервер передаёт текст с кодом SMS-шлюзу по API, шлюз доставляет сообщение через операторов.
  5. Пользователь вводит код. На iOS система сама предлагает код из SMS над клавиатурой, если поле ввода помечено как одноразовый код. На Android для этого есть SMS Retriever API и SMS User Consent API.
  6. Сервер сверяет код, ограничивает число неверных попыток и выдаёт токены доступа.

Код никогда не генерируется и не проверяется на телефоне. Всё, что происходит в приложении, можно подделать. Подробнее о схемах входа и токенах в статье про 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 часа.