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 — він відповідає вимогам законодавства про інформаційний захист дітей при наявності користувацької угоди.
Як вибрати відповідний рівень верифікації?
Порівняння за ключовими критеріями:
| Критерій | Декларативний | 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. Гарантуємо проходження рев'ю з першого разу. Зв'яжіться з нами для оцінки.







