---
description: Capacitor plugin for the Google Play Age Signals API. Retrieve age assurance signals to gate sensitive content and comply with platform regulations.
title: Capacitor Age Signals Plugin for Android & iOS - Capawesome
image: https://capawesome.io/docs/assets/images/social/plugins/age-signals.png
---

[ Skip to content](#capawesomecapacitor-age-signals) 

[ 🎉 Introducing **Capawesome Platform** — one platform for Live Updates, Native Builds, App Store Publishing, and Insider SDKs.](https://capawesome.io) 

* [  iOS ](#ios)
* [  Configuration ](#configuration)
* [  Usage ](#usage)
* [  Testing ](#testing)
* [  API ](#api)
* [  Enums ](#enums)
* [  Changelog ](#changelog)
* [  License ](#license)
* [  Android Battery Optimization ](/docs/plugins/android-battery-optimization/)
* [  Android Dark Mode Support ](/docs/plugins/android-dark-mode-support/)
* [  Android Edge-to-Edge Support ](/docs/plugins/android-edge-to-edge-support/)
* [  Android Foreground Service ](/docs/plugins/android-foreground-service/)
* [  App Review ](/docs/plugins/app-review/)
* [  App Shortcuts ](/docs/plugins/app-shortcuts/)
* [  App Update ](/docs/plugins/app-update/)
* [  Apple Sign-In ](/docs/plugins/apple-sign-in/)
* [  Asset Manager ](/docs/plugins/asset-manager/)
* [  Audio Player ](/docs/plugins/audio-player/)
* [  Audio Recorder ](/docs/plugins/audio-recorder/)
* [  Background Task ](/docs/plugins/background-task/)
* [  Badge ](/docs/plugins/badge/)
* [  Barometer ](/docs/plugins/barometer/)
* [  Biometrics ](/docs/plugins/biometrics/)
* [  Bluetooth Low Energy ](/docs/plugins/bluetooth-low-energy/)
* [  Cloudinary ](/docs/plugins/cloudinary/)
* [  Contacts ](/docs/plugins/contacts/)
* [  Datetime Picker ](/docs/plugins/datetime-picker/)
* [  File Compressor ](/docs/plugins/file-compressor/)
* [  File Opener ](/docs/plugins/file-opener/)
* [  File Picker ](/docs/plugins/file-picker/)
* [  Firebase ](/docs/plugins/firebase/)
* [  Formbricks ](/docs/plugins/formbricks/)
* [  Geocoder ](/docs/plugins/geocoder/)
* [  Google Sign-In ](/docs/plugins/google-sign-in/)
* [  Grafana Faro ](/docs/plugins/grafana-faro/)
* [  libSQL ](/docs/plugins/libsql/)
* [  Live Update ](/docs/plugins/live-update/)
* [  Managed Configurations ](/docs/plugins/managed-configurations/)
* [  Media Session ](/docs/plugins/media-session/)
* [  ML Kit ](/docs/plugins/mlkit/)
* [  Navigation Bar ](/docs/plugins/navigation-bar/)
* [  NFC ](/docs/plugins/nfc/)
* [  OAuth ](/docs/plugins/oauth/)
* [  Pedometer ](/docs/plugins/pedometer/)
* [  Photo Editor ](/docs/plugins/photo-editor/)
* [  PostHog ](/docs/plugins/posthog/)
* [  Printer ](/docs/plugins/printer/)
* [  Purchases ](/docs/plugins/purchases/)
* [  RealtimeKit ](/docs/plugins/realtimekit/)
* [  Screen Orientation ](/docs/plugins/screen-orientation/)
* [  Screenshot ](/docs/plugins/screenshot/)
* [  Secure Preferences ](/docs/plugins/secure-preferences/)
* [  Speech Recognition ](/docs/plugins/speech-recognition/)
* [  Speech Synthesis ](/docs/plugins/speech-synthesis/)
* [  Share Target ](/docs/plugins/share-target/)
* [  Square Mobile Payments ](/docs/plugins/square-mobile-payments/)
* [  SQLite ](/docs/plugins/sqlite/)
* [  Superwall ](/docs/plugins/superwall/)
* [  Torch ](/docs/plugins/torch/)
* [  Wifi ](/docs/plugins/wifi/)
* [  Zip ](/docs/plugins/zip/)
* [  Cloud ](/docs/cloud/)
* [  Live Updates ](/docs/cloud/live-updates/)
* Advanced
* Integrations
* [  Native Builds ](/docs/cloud/native-builds/)
* [  Configuration ](/docs/cloud/native-builds/configuration/)
* [  Environments ](/docs/cloud/native-builds/environments/)
* Guides
* [  Sample Projects ](/docs/cloud/native-builds/sample-projects/)
* [  Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [  Automations ](/docs/cloud/automations/)
* [  Assist ](/docs/cloud/assist/)
* Account
* Organizations
* [  Organization and User Management ](/docs/cloud/organizations/memberships/)
* [  Single Sign-On (SSO) ](/docs/cloud/organizations/sso/)
* [  Teams ](/docs/cloud/organizations/teams/)
* [  Two-Factor Authentication ](/docs/cloud/organizations/two-factor-authentication/)
* [  Integrations ](/docs/cloud/integrations/)
* [  License Keys ](/docs/cloud/license-keys/)
* [  Webhooks ](/docs/cloud/webhooks/)
* [  Pricing ](https://capawesome.io/pricing/)
* [  FAQ ](/docs/cloud/faq/)
* [  Support ](/docs/cloud/support/)
* [  Contributing ](/docs/contributing/)
* [  LLMs ](/docs/llms/)
* [  Insiders ](/docs/insiders/)
* [  License ](https://capawesome.io/legal/eula/)
* [  Support ](/docs/insiders/support/)
* [  FAQ ](/docs/insiders/faq/)
* [  Blog ](/blog/)
* Categories

* [  iOS ](#ios)
* [  Configuration ](#configuration)
* [  Usage ](#usage)
* [  Testing ](#testing)
* [  API ](#api)
* [  Enums ](#enums)
* [  Changelog ](#changelog)
* [  License ](#license)

# @capawesome/capacitor-age-signals[¶](#capawesomecapacitor-age-signals "Permanent link")

Capacitor plugin to use the [Play Age Signals API](https://developer.android.com/google/play/age-signals/overview) (Android) and [DeclaredAgeRange](https://developer.apple.com/documentation/declaredagerange/) (iOS) to request age signals about the user.

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

We are proud to offer one of the most complete and feature-rich Capacitor plugins for age verification. Here are some of the key features:

* 🖥️ **Cross-platform**: Supports Android and iOS.
* 🔍 **Age Verification**: Request user age signals using Play Age Signals API (Android) and DeclaredAgeRange (iOS).
* 👨‍👩‍👧‍👦 **Parental Controls**: Support for supervised accounts with parental approval status.
* 🧪 **Testing Support**: Built-in `FakeAgeSignalsManager` integration for testing different age verification scenarios (Android).
* 🌍 **Compliance Ready**: Built for US state age verification requirements (effective January 1, 2026).
* 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.

Missing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 0.3.x          | \>=8.x.x          | Active support |
| 0.2.x          | 7.x.x             | Deprecated     |

## Installation[¶](#installation "Permanent link")

You can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

`[](#%5F%5Fcodelineno-0-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-1-1) Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-age-signals` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-2-1)npm install @capawesome/capacitor-age-signals
[](#%5F%5Fcodelineno-2-2)npx cap sync
`

### Android[¶](#android "Permanent link")

#### Variables[¶](#variables "Permanent link")

If needed, you can define the following project variable in your app's `variables.gradle` file to change the default version of the dependency:

* `$androidPlayAgeSignalsVersion` version of `com.google.android.play:age-signals` (default: `0.0.3`)

This can be useful if you encounter dependency conflicts with other plugins in your project.

**Note**: The `FakeAgeSignalsManager` testing API is included in the main `age-signals` library, so no additional dependency is required for testing.

### iOS[¶](#ios "Permanent link")

#### Entitlements[¶](#entitlements "Permanent link")

To use the DeclaredAgeRange API, you must enable the `com.apple.developer.declared-age-range` entitlement in your app's entitlements file by adding the following key:

`[](#%5F%5Fcodelineno-3-1)<key>com.apple.developer.declared-age-range</key>
[](#%5F%5Fcodelineno-3-2)<true/>
`

Check out the [Apple documentation](https://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.contacts.notes) for more information.

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

## Usage[¶](#usage "Permanent link")

`[](#%5F%5Fcodelineno-4-1)import { AgeSignals } from '@capawesome/capacitor-age-signals';
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const checkAgeSignals = async () => {
[](#%5F%5Fcodelineno-4-4)  const result = await AgeSignals.checkAgeSignals();
[](#%5F%5Fcodelineno-4-5)  console.log('User Status:', result.userStatus);
[](#%5F%5Fcodelineno-4-6)  console.log('Age Lower:', result.ageLower);
[](#%5F%5Fcodelineno-4-7)  console.log('Age Upper:', result.ageUpper);
[](#%5F%5Fcodelineno-4-8)};
[](#%5F%5Fcodelineno-4-9)
[](#%5F%5Fcodelineno-4-10)const checkEligibility = async () => {
[](#%5F%5Fcodelineno-4-11)  const result = await AgeSignals.checkEligibility();
[](#%5F%5Fcodelineno-4-12)  console.log('Is Eligible:', result.isEligible);
[](#%5F%5Fcodelineno-4-13)};
`

## Testing[¶](#testing "Permanent link")

The plugin includes support for the `FakeAgeSignalsManager` API on Android, which allows you to simulate different age signals scenarios in your tests without requiring live responses from Google Play.

### Android Testing[¶](#android-testing "Permanent link")

**Important**: Due to a known issue in versions 0.0.1 and 0.0.2 of the Age Signals API, you may encounter a `java.lang.VerifyError` when calling the builder method of `AgeSignalsResult` in unit tests. As a workaround, run your tests as Android instrumented tests within the `androidTest` source set.

#### Example: Testing a Verified Adult User[¶](#example-testing-a-verified-adult-user "Permanent link")

`[](#%5F%5Fcodelineno-5-1)import { AgeSignals, UserStatus } from '@capawesome/capacitor-age-signals';
[](#%5F%5Fcodelineno-5-2)
[](#%5F%5Fcodelineno-5-3)// Enable the fake manager
[](#%5F%5Fcodelineno-5-4)await AgeSignals.setUseFakeManager({ useFake: true });
[](#%5F%5Fcodelineno-5-5)
[](#%5F%5Fcodelineno-5-6)// Set up a verified adult user
[](#%5F%5Fcodelineno-5-7)await AgeSignals.setNextAgeSignalsResult({
[](#%5F%5Fcodelineno-5-8)  userStatus: UserStatus.Verified,
[](#%5F%5Fcodelineno-5-9)});
[](#%5F%5Fcodelineno-5-10)
[](#%5F%5Fcodelineno-5-11)// Check age signals - will return the fake result
[](#%5F%5Fcodelineno-5-12)const result = await AgeSignals.checkAgeSignals();
[](#%5F%5Fcodelineno-5-13)console.log(result.userStatus); // 'VERIFIED'
`

#### Example: Testing a Supervised User (13-17 years old)[¶](#example-testing-a-supervised-user-13-17-years-old "Permanent link")

`[](#%5F%5Fcodelineno-6-1)import { AgeSignals, UserStatus } from '@capawesome/capacitor-age-signals';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)await AgeSignals.setUseFakeManager({ useFake: true });
[](#%5F%5Fcodelineno-6-4)
[](#%5F%5Fcodelineno-6-5)await AgeSignals.setNextAgeSignalsResult({
[](#%5F%5Fcodelineno-6-6)  userStatus: UserStatus.Supervised,
[](#%5F%5Fcodelineno-6-7)  ageLower: 13,
[](#%5F%5Fcodelineno-6-8)  ageUpper: 17,
[](#%5F%5Fcodelineno-6-9)  installId: 'fake_install_id',
[](#%5F%5Fcodelineno-6-10)});
[](#%5F%5Fcodelineno-6-11)
[](#%5F%5Fcodelineno-6-12)const result = await AgeSignals.checkAgeSignals();
[](#%5F%5Fcodelineno-6-13)console.log(result.userStatus); // 'SUPERVISED'
[](#%5F%5Fcodelineno-6-14)console.log(result.ageLower); // 13
[](#%5F%5Fcodelineno-6-15)console.log(result.ageUpper); // 17
[](#%5F%5Fcodelineno-6-16)console.log(result.installId); // 'fake_install_id'
`

#### Example: Testing Parental Approval Scenarios[¶](#example-testing-parental-approval-scenarios "Permanent link")

`[](#%5F%5Fcodelineno-7-1)import { AgeSignals, UserStatus } from '@capawesome/capacitor-age-signals';
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)await AgeSignals.setUseFakeManager({ useFake: true });
[](#%5F%5Fcodelineno-7-4)
[](#%5F%5Fcodelineno-7-5)// Test pending approval
[](#%5F%5Fcodelineno-7-6)await AgeSignals.setNextAgeSignalsResult({
[](#%5F%5Fcodelineno-7-7)  userStatus: UserStatus.SupervisedApprovalPending,
[](#%5F%5Fcodelineno-7-8)  ageLower: 13,
[](#%5F%5Fcodelineno-7-9)  ageUpper: 17,
[](#%5F%5Fcodelineno-7-10)  mostRecentApprovalDate: '2025-02-01',
[](#%5F%5Fcodelineno-7-11)  installId: 'fake_install_id',
[](#%5F%5Fcodelineno-7-12)});
[](#%5F%5Fcodelineno-7-13)
[](#%5F%5Fcodelineno-7-14)const result = await AgeSignals.checkAgeSignals();
[](#%5F%5Fcodelineno-7-15)console.log(result.userStatus); // 'SUPERVISED_APPROVAL_PENDING'
[](#%5F%5Fcodelineno-7-16)console.log(result.mostRecentApprovalDate); // '2025-02-01'
`

#### Example: Testing Error Scenarios[¶](#example-testing-error-scenarios "Permanent link")

`[](#%5F%5Fcodelineno-8-1)import { AgeSignals, ErrorCode } from '@capawesome/capacitor-age-signals';
[](#%5F%5Fcodelineno-8-2)
[](#%5F%5Fcodelineno-8-3)await AgeSignals.setUseFakeManager({ useFake: true });
[](#%5F%5Fcodelineno-8-4)
[](#%5F%5Fcodelineno-8-5)// Simulate a network error
[](#%5F%5Fcodelineno-8-6)await AgeSignals.setNextAgeSignalsException({
[](#%5F%5Fcodelineno-8-7)  errorCode: ErrorCode.NetworkError,
[](#%5F%5Fcodelineno-8-8)});
[](#%5F%5Fcodelineno-8-9)
[](#%5F%5Fcodelineno-8-10)try {
[](#%5F%5Fcodelineno-8-11)  await AgeSignals.checkAgeSignals();
[](#%5F%5Fcodelineno-8-12)} catch (error) {
[](#%5F%5Fcodelineno-8-13)  console.log('Caught network error:', error);
[](#%5F%5Fcodelineno-8-14)}
`

#### Disabling the Fake Manager[¶](#disabling-the-fake-manager "Permanent link")

`[](#%5F%5Fcodelineno-9-1)import { AgeSignals } from '@capawesome/capacitor-age-signals';
[](#%5F%5Fcodelineno-9-2)
[](#%5F%5Fcodelineno-9-3)// Switch back to the production manager
[](#%5F%5Fcodelineno-9-4)await AgeSignals.setUseFakeManager({ useFake: false });
[](#%5F%5Fcodelineno-9-5)
[](#%5F%5Fcodelineno-9-6)// This will now use the real Age Signals API
[](#%5F%5Fcodelineno-9-7)const result = await AgeSignals.checkAgeSignals();
`

## API[¶](#api "Permanent link")

* [checkAgeSignals(...)](#checkagesignals)
* [checkEligibility()](#checkeligibility)
* [setUseFakeManager(...)](#setusefakemanager)
* [setNextAgeSignalsResult(...)](#setnextagesignalsresult)
* [setNextAgeSignalsException(...)](#setnextagesignalsexception)
* [Interfaces](#interfaces)
* [Enums](#enums)

### checkAgeSignals(...)[¶](#checkagesignals "Permanent link")

`[](#%5F%5Fcodelineno-10-1)checkAgeSignals(options?: CheckAgeSignalsOptions | undefined) => Promise<CheckAgeSignalsResult>
`

Request the user's age signals.

| Param       | Type                                              |
| ----------- | ------------------------------------------------- |
| **options** | [CheckAgeSignalsOptions](#checkagesignalsoptions) |

**Returns:** `Promise<[CheckAgeSignalsResult](#checkagesignalsresult)>`

**Since:** 0.0.1

---

### checkEligibility()[¶](#checkeligibility "Permanent link")

`[](#%5F%5Fcodelineno-11-1)checkEligibility() => Promise<CheckEligibilityResult>
`

Check if the user is eligible for age-gated features.

Only available on iOS.

**Returns:** `Promise<[CheckEligibilityResult](#checkeligibilityresult)>`

**Since:** 0.3.1

---

### setUseFakeManager(...)[¶](#setusefakemanager "Permanent link")

`[](#%5F%5Fcodelineno-12-1)setUseFakeManager(options: SetUseFakeManagerOptions) => Promise<void>
`

Enable or disable the fake age signals manager for testing.

Only available on Android.

| Param       | Type                                                  |
| ----------- | ----------------------------------------------------- |
| **options** | [SetUseFakeManagerOptions](#setusefakemanageroptions) |

**Since:** 0.3.1

---

### setNextAgeSignalsResult(...)[¶](#setnextagesignalsresult "Permanent link")

`[](#%5F%5Fcodelineno-13-1)setNextAgeSignalsResult(options: SetNextAgeSignalsResultOptions) => Promise<void>
`

Set the next age signals result to be returned by the fake manager.

Only available on Android.

| Param       | Type                                                              |
| ----------- | ----------------------------------------------------------------- |
| **options** | [SetNextAgeSignalsResultOptions](#setnextagesignalsresultoptions) |

**Since:** 0.3.1

---

### setNextAgeSignalsException(...)[¶](#setnextagesignalsexception "Permanent link")

`[](#%5F%5Fcodelineno-14-1)setNextAgeSignalsException(options: SetNextAgeSignalsExceptionOptions) => Promise<void>
`

Set the next exception to be thrown by the fake manager.

Only available on Android.

| Param       | Type                                                                    |
| ----------- | ----------------------------------------------------------------------- |
| **options** | [SetNextAgeSignalsExceptionOptions](#setnextagesignalsexceptionoptions) |

**Since:** 0.3.1

---

### Interfaces[¶](#interfaces "Permanent link")

#### CheckAgeSignalsResult[¶](#checkagesignalsresult "Permanent link")

| Prop                       | Type                                        | Description                                                                                                                                                                                                                                                                                                     | Since |
| -------------------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **userStatus**             | [UserStatus](#userstatus)                   | The user's verification status.                                                                                                                                                                                                                                                                                 | 0.0.1 |
| **ageLower**               | number                                      | The (inclusive) lower bound of a supervised user's age range. Only available when userStatus is SUPERVISED, SUPERVISED\_APPROVAL\_PENDING, or SUPERVISED\_APPROVAL\_DENIED.                                                                                                                                     | 0.0.1 |
| **ageUpper**               | number                                      | The (inclusive) upper bound of a supervised user's age range. Only available when userStatus is SUPERVISED, SUPERVISED\_APPROVAL\_PENDING, or SUPERVISED\_APPROVAL\_DENIED and the user's age is under 18.                                                                                                      | 0.0.1 |
| **mostRecentApprovalDate** | string                                      | The effective from date of the most recent significant change that was approved. When an app is installed, the date of the most recent significant change prior to install is used. Only available when userStatus is SUPERVISED\_APPROVAL\_PENDING or SUPERVISED\_APPROVAL\_DENIED. Only available on Android. | 0.0.1 |
| **installId**              | string                                      | An ID assigned to supervised user installs by Google Play, used for the purposes of notifying you of revoked app approval. Only available when userStatus is SUPERVISED, SUPERVISED\_APPROVAL\_PENDING, or SUPERVISED\_APPROVAL\_DENIED. Only available on Android.                                             | 0.0.1 |
| **ageRangeDeclaration**    | [AgeRangeDeclaration](#agerangedeclaration) | The age range declaration type. Only available on iOS (26.2+).                                                                                                                                                                                                                                                  | 0.4.0 |

#### CheckAgeSignalsOptions[¶](#checkagesignalsoptions "Permanent link")

| Prop         | Type       | Description                                                                                                                    | Default        | Since |
| ------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------ | -------------- | ----- |
| **ageGates** | number\[\] | The age ranges that the user falls into. The provided array must contain at least 2 and at most 3 ages. Only available on iOS. | \[13, 15, 18\] | 0.0.2 |

#### CheckEligibilityResult[¶](#checkeligibilityresult "Permanent link")

| Prop           | Type    | Description                                                                                                                                                                               | Since |
| -------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **isEligible** | boolean | Whether the user is eligible for age-gated features. Returns true if the user is in an applicable region that requires additional age-related obligations. Always returns false on macOS. | 0.3.1 |

#### SetUseFakeManagerOptions[¶](#setusefakemanageroptions "Permanent link")

| Prop        | Type    | Description                                              | Default | Since |
| ----------- | ------- | -------------------------------------------------------- | ------- | ----- |
| **useFake** | boolean | Whether to use the fake age signals manager for testing. | false   | 0.3.1 |

#### SetNextAgeSignalsResultOptions[¶](#setnextagesignalsresultoptions "Permanent link")

| Prop                       | Type                      | Description                                                                                                                                                                                                                                                                          | Since |
| -------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| **userStatus**             | [UserStatus](#userstatus) | The user's verification status.                                                                                                                                                                                                                                                      | 0.3.1 |
| **ageLower**               | number                    | The (inclusive) lower bound of a supervised user's age range. Only available when userStatus is SUPERVISED, SUPERVISED\_APPROVAL\_PENDING, or SUPERVISED\_APPROVAL\_DENIED.                                                                                                          | 0.3.1 |
| **ageUpper**               | number                    | The (inclusive) upper bound of a supervised user's age range. Only available when userStatus is SUPERVISED, SUPERVISED\_APPROVAL\_PENDING, or SUPERVISED\_APPROVAL\_DENIED and the user's age is under 18.                                                                           | 0.3.1 |
| **mostRecentApprovalDate** | string                    | The effective from date of the most recent significant change that was approved. When an app is installed, the date of the most recent significant change prior to install is used. Only available when userStatus is SUPERVISED\_APPROVAL\_PENDING or SUPERVISED\_APPROVAL\_DENIED. | 0.3.1 |
| **installId**              | string                    | An ID assigned to supervised user installs by Google Play, used for the purposes of notifying you of revoked app approval. Only available when userStatus is SUPERVISED, SUPERVISED\_APPROVAL\_PENDING, or SUPERVISED\_APPROVAL\_DENIED.                                             | 0.3.1 |

#### SetNextAgeSignalsExceptionOptions[¶](#setnextagesignalsexceptionoptions "Permanent link")

| Prop          | Type                    | Description                                      | Since |
| ------------- | ----------------------- | ------------------------------------------------ | ----- |
| **errorCode** | [ErrorCode](#errorcode) | The error code to be thrown by the fake manager. | 0.3.1 |

### Enums[¶](#enums "Permanent link")

#### UserStatus[¶](#userstatus "Permanent link")

| Members                       | Value                           | Description                                                                                                                                                                                                                                                                              | Since |
| ----------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **Verified**                  | 'VERIFIED'                      | The user is over 18\. Google verified the user's age using a commercially reasonable method such as a government-issued ID, credit card, or facial age estimation.                                                                                                                       | 0.0.1 |
| **Supervised**                | 'SUPERVISED'                    | The user has a supervised Google Account managed by a parent who sets their age. Use ageLower and ageUpper to determine the user's age range.                                                                                                                                            | 0.0.1 |
| **SupervisedApprovalPending** | 'SUPERVISED\_APPROVAL\_PENDING' | The user has a supervised Google Account, and their supervising parent has not yet approved one or more pending significant changes. Use ageLower and ageUpper to determine the user's age range. Use mostRecentApprovalDate to determine the last significant change that was approved. | 0.0.1 |
| **SupervisedApprovalDenied**  | 'SUPERVISED\_APPROVAL\_DENIED'  | The user has a supervised Google Account, and their supervising parent denied approval for one or more significant changes. Use ageLower and ageUpper to determine the user's age range. Use mostRecentApprovalDate to determine the last significant change that was approved.          | 0.0.1 |
| **Unknown**                   | 'UNKNOWN'                       | The user's age is unknown and the user is in an applicable jurisdiction or region. To obtain an age signal from Google Play, ask the user to visit the Play Store to resolve their status.                                                                                               | 0.0.1 |
| **Declared**                  | 'DECLARED'                      | The user has self-declared or guardian-declared their age. Only available on Android.                                                                                                                                                                                                    | 0.4.0 |
| **Empty**                     | 'EMPTY'                         | The user is either not in an applicable jurisdiction or region, or the user does not share their age with apps.                                                                                                                                                                          | 0.0.1 |

#### AgeRangeDeclaration[¶](#agerangedeclaration "Permanent link")

| Members              | Value                | Description                                                                            | Since |
| -------------------- | -------------------- | -------------------------------------------------------------------------------------- | ----- |
| **SelfDeclared**     | 'SELF\_DECLARED'     | The age range was self-declared by the user without external verification.             | 0.4.0 |
| **GuardianDeclared** | 'GUARDIAN\_DECLARED' | The age range was declared by a guardian without external verification.                | 0.4.0 |
| **Confirmed**        | 'CONFIRMED'          | The age range was set using a scrutinized method, like a credit card or government ID. | 0.4.0 |

#### ErrorCode[¶](#errorcode "Permanent link")

| Members                         | Value                               | Description                                                                                                                                                      | Since |
| ------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **ApiNotAvailable**             | 'API\_NOT\_AVAILABLE'               | The Play Age Signals API is not available. The Play Store app version installed on the device might be old.                                                      | 0.0.1 |
| **PlayStoreNotFound**           | 'PLAY\_STORE\_NOT\_FOUND'           | No Play Store app is found on the device.                                                                                                                        | 0.0.1 |
| **NetworkError**                | 'NETWORK\_ERROR'                    | No available network is found.                                                                                                                                   | 0.0.1 |
| **PlayServicesNotFound**        | 'PLAY\_SERVICES\_NOT\_FOUND'        | Play Services is not available or its version is too old.                                                                                                        | 0.0.1 |
| **CannotBindToService**         | 'CANNOT\_BIND\_TO\_SERVICE'         | Binding to the service in the Play Store has failed. This can be due to having an old Play Store version installed on the device or device memory is overloaded. | 0.0.1 |
| **PlayStoreVersionOutdated**    | 'PLAY\_STORE\_VERSION\_OUTDATED'    | The Play Store app needs to be updated.                                                                                                                          | 0.0.1 |
| **PlayServicesVersionOutdated** | 'PLAY\_SERVICES\_VERSION\_OUTDATED' | Play Services needs to be updated.                                                                                                                               | 0.0.1 |
| **ClientTransientError**        | 'CLIENT\_TRANSIENT\_ERROR'          | There was a transient error in the client device.                                                                                                                | 0.0.1 |
| **AppNotOwned**                 | 'APP\_NOT\_OWNED'                   | The app was not installed by Google Play.                                                                                                                        | 0.0.1 |
| **InternalError**               | 'INTERNAL\_ERROR'                   | Unknown internal error.                                                                                                                                          | 0.0.1 |
| **SdkVersionOutdated**          | 'SDK\_VERSION\_OUTDATED'            | The Age Signals SDK version is outdated. Only available on Android.                                                                                              | 0.4.0 |

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/age-signals/CHANGELOG.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/age-signals/LICENSE).

May 17, 2026 

 Back to top 