Age-gate (age verification) in iOS/Android mobile apps
Age-gate — the first barrier before age-restricted content: alcohol, tobacco, gambling, 18+ content. Without it, App Store and Google Play reject the app during review — a common pain point for our clients. Users enter incorrect dates of birth, the app lets minors through — legal risks under 436-FZ, COPPA, GDPR. We have implemented age-gate in over 15 projects, from declarative checks to KYC with biometrics. We will assess your project and select the optimal verification level.
Why age-gate is important for mobile apps?
Users often complain that the app lets everyone through. This is a reputational risk. Legally — violation of 436-FZ in Russia, COPPA in the USA, GDPR in Europe. Technically, the minimal option (enter year of birth) is a declaration, not verification. But for most categories this is sufficient: Apple and Google require the presence of a barrier, not 100% age recognition. For example, declarative checks are 10 times faster than KYC but less reliable (App Store Review Guidelines Section 5.1.1).
Verification levels
| Level | Technology | Development time | Protection |
|---|---|---|---|
| Declarative | Date of birth selection | 3–5 days | Low |
| AI age estimation | AWS Rekognition / Azure Face API | 1–2 weeks | Medium |
| KYC via document | Sumsub, Onfido | 2–4 weeks | High |
Declarative age-gate — user enters date of birth or selects "I am 18+". Sufficient for Entertainment and Food & Drink. Does not protect against children who know how to answer correctly, but removes legal liability from the developer.
Document verification — KYC-light option: user photographs passport or ID, service (Sumsub, Onfido) extracts date of birth and confirms age. No document is stored on the server, only the verification result. We guarantee correct configuration of all webhooks.
Age estimation via photo — ML model estimates age from selfie. Not legally reliable verification but used as a first barrier. AWS Rekognition and Azure Face API provide EstimatedAge in a range. Certified experience with these services — our engineers have used them in commercial projects.
For most apps in Russia, declarative age-gate is sufficient — it meets the requirements of 436-FZ on child information protection when combined with a user agreement.
How to choose the right verification level?
Comparison by key criteria:
| Criteria | Declarative | AI estimation | KYC |
|---|---|---|---|
| Legal strength | Low | Medium | High |
| Implementation time | 3–5 days | 1–2 weeks | 2–4 weeks |
| User convenience | 1 click | 2 clicks + selfie | 3–5 minutes with photo |
Typical mistakes when implementing age-gate
- Storing status in plain SharedPreferences — data is easily readable. Use EncryptedSharedPreferences or Keychain (iOS).
- Resetting status on every restart — user gets annoyed. Status is valid until logout or reinstall.
- Ignoring App Store Review Guidelines Section 5.1.1 — requires age rating and correct category.
- Lack of edge-case handling — what to do if KYC fails? Show a screen with support or an alternative.
Example code in Kotlin for 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) } } Status is not reset on restart — the user should not have to confirm age every time. Reset only on logout or reinstall.
Navigation guard using Jetpack Navigation or at Activity level:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (!AgeGateManager.isVerified(this)) { startActivity(Intent(this, AgeGateActivity::class.java)) finish() return } setContent { MainScreen() } } Important for App Store: Apple and Google have their own requirements for age-gate. Apps with 18+ content must be correctly categorized in App Store Connect (age rating 17+) and Google Play (Content Rating "Adults only"). Without this — rejection during review.
Our process
- Analytics — study platform requirements and content specifics.
- Design — choose verification level, status storage architecture.
- Implementation — write code considering code signing, provisioning profiles.
- Testing — check on devices with different OS versions, edge cases.
- Deployment — publish to App Store and Google Play, assist with review.
What's included
- Source code of age-gate (Swift/Kotlin/Flutter) with comments.
- Integration with selected KYC/ML service (if required).
- Configuration of App Store Connect and Google Play Console (age rating, categories).
- User agreements and consent screens.
- Post-publication support — 30 days.
Get a consultation for your project. Experience — over 5 years in mobile development, over 20 successful releases with age-gate. We guarantee first-time review approval. Contact us for an assessment.







