Авторизация в 2026 для новичков: Email/пароль, OAuth, OTP и JWT без боли 🔐

Разбираем, как работает современный логин: зачем хешировать пароли, как устроены JWT и refresh-токены, что происходит при входе через Google/Apple, и как внедрять OTP/TOTP без дыр в безопасности. Плюс — частые ошибки новичков и чек-лист для собеседования.

Mobile Разработка

6 мин

Разработали первое мобильное приложение? Поздравляю! 🎉 Но расслабляться рано — впереди один из самых нервных этапов: модерация. По ощущениям (и по практике команд) примерно каждая вторая первая публикация ловит «отказ» или список правок. Давайте разберёмся, что чаще всего идёт не так — и как пройти ревью с первого раза.

Российская специфика: что нужно знать?

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

Проблема с оплатой аккаунта разработчика

Apple и Google могут блокировать оплату российскими картами. Что обычно делают:

  • Используют аккаунты друзей/партнёров за границей

  • Работают через зарубежные компании-посредники

  • Используют международные виртуальные карты (например, Wise)

  • Для Android рассматривают альтернативы: RuStore, NashStore, AppGallery

Региональные ограничения

Некоторые сервисы и API могут быть недоступны или работать с нюансами:

  • Карты: Google Maps API — возможны ограничения; альтернативы: Yandex Maps, OpenStreetMap

  • Платежи: зарубежные варианты могут работать ограниченно; заранее продумайте модель монетизации

  • Push: Firebase обычно работает, но «внезапные нюансы» возможны — держите план B

Дальше — самое важное: почему отклоняют приложения. Разберём обе платформы по-человечески и с примерами.

🍎 Топ-5 причин отказа в App Store

1) Некорректные метаданные и описание

Что идёт не так:

  • Описание содержит контакты (email, телефон) или ссылки на соцсети

  • Скриншоты не соответствуют реальному функционалу

  • В описании упоминаются Android/Google Play/другие платформы

  • Ключевые слова содержат названия брендов/конкурентов

Как правильно:

❌ Плохо

Лучшее приложение! Пишите на email@example.com
Доступно также в Google Play!

✅ Хорошо

Планируйте задачи, управляйте проектами и повышайте продуктивность.
Синхронизация между устройствами, напоминания и удобный интерфейс.

Важно для российских разработчиков: если у вас есть веб-версия с российским доменом, не вставляйте ссылку в описание «на автомате». Apple может придраться к содержимому сайта.

2) Minimum Functionality (слишком «пустой» MVP)

Отклоняют, если:

  • Это слишком простая web-обёртка без ценности

  • Приложение дублирует встроенные функции iOS (фонарик/калькулятор) без доп. смысла

  • Приложение не работает без аккаунта, но вы не дали тестовый логин модераторам

Решение:

  • Дайте демо-аккаунт с заполненными данными

  • Опишите в примечаниях, что и где нажимать (да, это реально помогает)

  • Добавьте уникальную ценность (не просто web-view)

3) Конфиденциальность и приватность

Частые ошибки:

  • Сбор данных без согласия

  • Нет Privacy Policy

  • Запрос разрешений без понятного объяснения

  • Трекинг без корректного разрешения (ATT)

Пример: в iOS не пишите «нужна камера потому что нужна». Пишите конкретно и по делу.

// При запросе камеры в Info.plist обязательно:
<key>NSCameraUsageDescription</key>
<string>Приложению нужен доступ к камере для
сканирования QR-кодов ваших заказов</string>

// А НЕ просто:
<string>Нужен доступ к камере</string>
  • Privacy Policy лучше иметь на английском (для международного) и русском (для аудитории)

  • Ссылка на Privacy Policy обязательна в App Store Connect

  • Если собираете email/телефон — прямо объясните зачем

4) Баги и крэши при тестировании

Модераторы реально тестируют приложение. Если оно падает на первом запуске или показывает белый экран — вылетаете из ревью быстрее, чем успеете моргнуть 😅

Типичные проблемы:

  • Краш при первом запуске

  • Белый экран/зависание

  • Неработающие кнопки

  • Проблемы с iPad-версией (если указали поддержку)

Как проверить себя:

  • Тестируйте на реальных устройствах (не только симулятор)

  • Проверьте основные сценарии: первый запуск, логин, ключевые экраны

  • Используйте TestFlight для бета-тестирования

5) Покупки и монетизация

Критические ошибки:

  • Оплата «в обход» IAP (In-App Purchase)

  • Упоминание более выгодных цен на сайте

  • Подписка без управления в приложении

Жёсткая реальность: если вы не можете принимать платежи через Apple IAP (например, нет зарубежной компании), подумайте о модели: бесплатное приложение, активация через веб (без упоминания цен), или публикация в альтернативных сторах.

🤖 Топ-5 причин отказа в Google Play

1) Несоответствие целевого API уровня

Google требует актуальный targetSdkVersion. Если вы сидите на старом — готовьтесь к отказу.

// В 2025 году минимум (пример):
android {
  compileSdk 34
  defaultConfig {
    targetSdk 34  // Не ниже!
    minSdk 24
  }
}

Почему отклоняют: старый targetSdk (например, 28/30). Решение: обновить проект и зависимости.

2) Нарушение Content Policy

Частые проблемы:

  • Иконки/название вводят в заблуждение (слишком похожи на известные бренды)

  • Контент 18+ без рейтинга

  • Спам-функциональность (автоматические действия без согласия)

  • Медицинские/финансовые советы без дисклеймера

Для российского рынка: если приложение связано с финансами — явно пишите, что это не финансовый советник. Осторожнее с темами криптовалют — модерация бывает строгой.

3) Проблемы с разрешениями (Permissions)

Что бесит модераторов: когда вы запрашиваете всё подряд, а используете 1 кнопку.

<!-- ❌ Плохо: просите всё подряд -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- но реально используете только камеру -->

Правило: каждое разрешение должно быть обосновано (в том числе в Data Safety / декларациях).

4) Нет обязательной информации о сборе данных (Data Safety)

Google требует заполнить Data Safety: что собираете, как используете, передаёте ли третьим лицам, можно ли удалить данные.

Лайфхак: даже если ничего не собираете — прямо укажите No data collected. Пропуск этого шага часто заканчивается отказом.

5) Битые или тестовые элементы

  • Залили Debug вместо Release

  • Оставили тестовые кнопки/фичи

  • Логи в консоли (уберите console.log, Log.d())

  • Слишком большой размер AAB

✅ Собрали Release-версию
✅ Включили ProGuard/R8
✅ Удалили console.log / Log.d
✅ Протестировали на разных экранах
✅ Проверили работу на Android 14

⚠️ Общие ошибки для обеих платформ

Неправильные размеры иконок и скриншотов

App Store

  • Иконка 1024×1024px (без альфа-канала, без скруглений)

  • Скриншоты для iPhone и iPad отдельно

  • Разные размеры экранов (например, 6.7", 6.5", 5.5")

Google Play

  • Иконка 512×512px

  • Feature Graphic 1024×500px

  • Минимум 2 скриншота (максимум 8)

  • JPG/PNG до 8MB

Типичная ловушка: загружаете “айфон-скриншоты” с закруглениями в Google Play — Play добавляет свои скругления. Получается двойная рамка и «дешёвый вид».

Проблемы с возрастным рейтингом

  • Даже упоминание алкоголя может поднять рейтинг

  • Чат/форум = потенциально выше рейтинг

  • Страшный/шок-контент даже «в шутку» = выше рейтинг

Совет: лучше честно завысить, чем занизить и получить отказ с повторной подачей.

Нет возможности удалить аккаунт

Требование последних лет: если пользователь может создать аккаунт, он должен иметь возможность удалить его прямо в приложении (а не “пишите в поддержку”).

// Минимальный вариант
async function deleteAccount() {
  if (confirm('Точно удалить аккаунт? Данные восстановить нельзя.')) {
    await api.deleteUser(userId);
    await logout();
    showMessage('Аккаунт удалён');
  }
}

Альтернативные площадки (если совсем тяжело)

  • RuStore — растущая аудитория, своя модерация

  • NashStore — альтернатива для Android

  • AppGallery — магазин Huawei, большая аудитория в Азии

😵 Что делать, если всё-таки отклонили

Не паникуйте. Отказ — это нормально, особенно на первой публикации.

  1. Внимательно прочитайте причину отказа (приходит на email/в консоль)

  2. Исправьте конкретные пункты

  3. В Resolution Center/ответе опишите, что именно исправили

  4. Подайте заново

Если причина непонятна — попросите уточнить. Обычно модераторы отвечают. Для русскоязычных разработчиков: пишите простым английским, без сленга.

🏁 Заключение: главные правила

  • Золотое правило №1: читайте гайдлайны. Большинство отказов — из-за игнорирования документации.

  • Золотое правило №2: тестируйте на реальных устройствах. Эмулятор не покажет всех проблем.

  • Золотое правило №3: будьте честны. Рейтинг, разрешения, функционал — без «хитростей».

  • Золотое правило №4: не спешите. Неделя подготовки экономит месяц переподач.

Для российских разработчиков: держите запасной план. Ограничения могут меняться внезапно. Имейте контакты людей/компаний для публикации и продумайте альтернативные сторы.

🎓 Хотите глубже разобраться в мобильной разработке?

Публикация — это финальный штрих в длинном пути. В Кодике мы разбираем весь процесс от идеи до релиза:

  • Разработка на React Native, Flutter и нативных технологиях

  • Архитектура мобильных приложений

  • Работа с API и базами данных

  • Настройка CI/CD для автоматической публикации

  • Монетизация и аналитика

  • Практические задания и проекты — без воды

Нужна поддержка? Мы тут! 🤝

Застряли с ошибкой? Не проходит модерация? Не знаете, как правильно оформить Data Safety или метаданные?

Присоединяйтесь к нашему Telegram-сообществу: более 2000 активных разработчиков помогут разобраться.

👉 Найдите Кодик в Telegram и станьте частью активного сообщества разработчиков!

Комментарии