Реализация age-gate (проверка возраста) в мобильном приложении
Age-gate — барьер перед контентом с возрастным ограничением: алкоголь, табак, азартные игры, контент 18+. Технически минимальный вариант (введи год рождения) — это не верификация, а декларация. Реальная проверка требует интеграции с верификационным сервисом или биометрии.
Уровни верификации
Декларативный age-gate — пользователь вводит дату рождения или выбирает "мне есть 18 лет". Достаточно для большинства приложений в категориях Entertainment и Food & Drink. Не защищает от детей, которые знают как правильно ответить, но снимает юридическую ответственность с разработчика.
Верификация через документ — KYC-лёгкий вариант: пользователь фотографирует паспорт или ID, сервис (Sumsub, Onfido) извлекает дату рождения и подтверждает возраст. Без сохранения документа на сервере, только результат проверки.
Age Estimation по фото — ML-модель оценивает возраст по selfie. Не является юридически надёжной верификацией, но используется как первый барьер. AWS Rekognition и Azure Face API предоставляют EstimatedAge в диапазоне.
Для большинства приложений в России достаточно декларативного age-gate — он соответствует требованиям 436-ФЗ об информационной защите детей при наличии пользовательского соглашения.
Реализация
На 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"). Без этого — отклонение при ревью.
Age-gate с декларативной проверкой — 3-5 дней разработки. С интеграцией ML-сервиса или KYC-верификации — 2-4 недели. Стоимость рассчитывается индивидуально.







