Age-gate (проверка возраста) в мобильном приложении iOS/Android
Age-gate — первый барьер перед контентом с возрастным ограничением: алкоголь, табак, азартные игры, контент 18+. Без него App Store и Google Play отклоняют приложение на ревью — это частая боль наших клиентов. Пользователи вводят некорректную дату рождения, приложение пропускает несовершеннолетних — юридические риски по 436-ФЗ, COPPA, GDPR. Мы реализовали age-gate более чем в 15 проектах, от декларативной проверки до KYC с биометрией. Оценим ваш проект и подберём оптимальный уровень верификации.
Почему age-gate важен для мобильного приложения?
Пользователи часто жалуются, что приложение пускает всех подряд. Это репутационные риски. Юридически — нарушение 436-ФЗ в России, COPPA в США, GDPR в Европе. Технически минимальный вариант (введи год рождения) — это декларация, не верификация. Но для большинства категорий этого достаточно: Apple и Google требуют именно наличие ширмы, а не стопроцентное распознавание возраста. Например, декларативная проверка в 10 раз быстрее KYC, но менее надёжна (App Store Review Guidelines Section 5.1.1).
Уровни верификации
| Уровень | Технология | Время разработки | Защита | Стоимость интеграции |
|---|---|---|---|---|
| Декларативный | Выбор даты рождения | 3–5 дней | Низкая | Минимальная |
| AI age estimation | AWS Rekognition / Azure Face API | 1–2 недели | Средняя | Средняя |
| KYC по документу | Sumsub, Onfido | 2–4 недели | Высокая | Высокая |
Декларативный age-gate — пользователь вводит дату рождения или выбирает "мне есть 18 лет". Достаточно для Entertainment и Food & Drink. Не защищает от детей, которые знают, как правильно ответить, но снимает юридическую ответственность с разработчика.
Верификация через документ — KYC-лёгкий вариант: пользователь фотографирует паспорт или ID, сервис (Sumsub, Onfido) извлекает дату рождения и подтверждает возраст. Без сохранения документа на сервере, только результат проверки. Мы гарантируем правильную настройку всех вебхуков.
Age Estimation по фото — ML-модель оценивает возраст по selfie. Не является юридически надёжной верификацией, но используется как первый барьер. AWS Rekognition и Azure Face API предоставляют EstimatedAge в диапазоне. Сертифицированный опыт работы с этими сервисами — наши инженеры применяли их в коммерческих проектах.
Для большинства приложений в России достаточно декларативного age-gate — он соответствует требованиям 436-ФЗ об информационной защите детей при наличии пользовательского соглашения.
Как выбрать подходящий уровень верификации?
Сравнение по ключевым критериям:
| Критерий | Декларативный | AI estimation | KYC |
|---|---|---|---|
| Юридическая сила | Низкая | Средняя | Высокая |
| Время внедрения | 3–5 дней | 1–2 недели | 2–4 недели |
| Удобство пользователя | 1 клик | 2 клика + селфи | 3–5 минут с фото |
| Стоимость поддержки | Бесплатно | Низкая | Высокая |
Типичные ошибки при реализации age-gate
- Хранение статуса в Plain SharedPreferences — данные легко читаются. Используйте EncryptedSharedPreferences или Keychain (iOS).
- Сброс статуса при любом перезапуске — пользователь раздражается. Статус действителен до logout или переустановки.
- Игнорирование App Store Review Guidelines Section 5.1.1 — требуется возрастной рейтинг и корректная категория.
- Отсутствие обработки edge-кейсов — что делать, если KYC не прошёл? Показывать экран с поддержкой или альтернативой.
Пример кода на Kotlin для Android
object AgeGateManager { private const val KEY_AGE_VERIFIED = "age_verified" fun isVerified(context: Context): Boolean { return EncryptedPreferences.getBoolean(context, KEY_AGE_VERIFIED, false) } fun markVerified(context: Context, birthDate: LocalDate) { val age = ChronoUnit.YEARS.between(birthDate, LocalDate.now()) require(age >= 18) { "Under 18" } EncryptedPreferences.putBoolean(context, KEY_AGE_VERIFIED, true) } } Статус не сбрасываем при перезапуске — пользователь не должен подтверждать возраст каждый раз. Сбрасываем только при logout или переустановке.
Навигационный guard на Jetpack Navigation или на уровне Activity:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (!AgeGateManager.isVerified(this)) { startActivity(Intent(this, AgeGateActivity::class.java)) finish() return } setContent { MainScreen() } } Важный момент для App Store: Apple и Google имеют собственные требования к age-gate. Приложения с контентом 18+ должны быть правильно категоризированы в App Store Connect (age rating 17+) и Google Play (Content Rating "Adults only"). Без этого — отклонение при ревью.
Процесс работы
- Аналитика — изучаем требования платформы и специфику контента.
- Проектирование — выбираем уровень верификации, архитектуру хранения статусов.
- Реализация — пишем код с учётом code signing, provisioning profile.
- Тестирование — проверяем на устройствах с разными версиями ОС, Edge кейсы.
- Деплой — публикуем в App Store и Google Play, помогаем пройти ревью.
Что входит в работу
- Исходный код age-gate (Swift/Kotlin/Flutter) с комментариями.
- Интеграция с выбранным KYC/ML-сервисом (если требуется).
- Настройка App Store Connect и Google Play Console (age rating, категории).
- Пользовательские соглашения и экраны согласия.
- Поддержка после публикации — 30 дней.
Получите консультацию по вашему проекту. Опыт — более 5 лет в мобильной разработке, более 20 успешных релизов с age-gate. Гарантируем прохождение ревью с первого раза. Свяжитесь с нами для оценки.







