This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 57).
Expo AgeRange
A library that provides access to age range information using Play Age Signals API on Android and Declared Age Range framework on iOS.
expo-age-range provides access to user age range information. It uses Google's Play Age Signals API on Android and Apple's Declared Age Range framework on iOS.
This library allows you to request age range information from your app users to help you comply with age-appropriate content regulations (such as in Texas, USA) and provide age-appropriate experiences in your app.
The underlying native APIs provided by Google and Apple are under active development. While this library is stable, it may require an increased number of breaking changes to accommodate that.
Limitations
We recommend testing the functionality on a real device, as simulator runtimes may not work as expected.
Installation
If you are installing this in an existing React Native app, make sure to install expo in your project.
Configuration in app config
Set up the iOS project
To use the age range API on iOS, you need to build your project with Xcode 26.0 or later but we recommend you build with the latest Xcode to have access to the latest APIs.
The com.apple.developer.declared-age-range entitlement is required. Add it to your app config file:
Are you using this library in an existing React Native app?
For existing React Native projects, add the entitlement to your project's ios/[app]/[app].entitlements file:
<key>com.apple.developer.declared-age-range</key> <true/>
Usage
On Android, Play Age Signals only reports an age range while the user consents to sharing it. Call requestAgeSignalsAccessAsync first and continue only when it resolves with 'SHARED'. On iOS the consent prompt is part of requestAgeRangeAsync, so the call resolves with null and the example below continues.
Testing age signals on Android
Google Play only reports age signals to accounts it has enabled, so your test accounts may not have the age range you need. Use setFakeAgeSignals to fake them instead, through Google Play's FakeAgeSignalsManager.
Only debuggable builds can fake signals, because faked signals would let any code in the app bypass your age gating. Passing anything other than null in a build that is not debuggable throws ERR_AGE_RANGE_FAKE_SIGNALS_NOT_DEBUGGABLE.
Your requests do not change, only what they report:
// Report a supervised 13 to 15 year old with a change waiting for approval. AgeRange.setFakeAgeSignals({ ageSignalsStatus: 'SHARED', lowerBound: 13, upperBound: 15, ageRangeSource: 'TIER_B', significantChangeStatus: 'PENDING', }); const status = await AgeRange.requestAgeSignalsAccessAsync(); const { lowerBound } = await AgeRange.requestAgeRangeAsync({ threshold1: 18 }); // Report the real signals again. AgeRange.setFakeAgeSignals(null);
To fake a failure, pass an error code instead of signals:
AgeRange.setFakeAgeSignals({ errorCode: -4 });
Additional resources
- Play Age Signals API: Android documentation for age signals
- Declared Age Range framework: iOS documentation for declared age range
API
import * as AgeRange from 'expo-age-range';
No API data file found, sorry!
Error codes
Available in the code property of any error thrown by the native module. For Android-specific error codes, see the "Error code reference" in Use Play Age Signals API docs.