DeviceInfo Module

Complete API documentation for the DeviceInfo module.

Import

import { DeviceInfoModule } from 'react-native-nitro-device-info';

Core Device Information (9 APIs)

Synchronous properties providing instant access to basic device identity.

deviceId: string

Device model identifier.

const deviceId = DeviceInfoModule.deviceId;
// iOS: "iPhone14,2"
// Android: "SM-G998B"

brand: string

Device brand/manufacturer name.

const brand = DeviceInfoModule.brand;
// iOS: "Apple"
// Android: "Samsung", "Google", "OnePlus", etc.

model: string

Device model name.

const model = DeviceInfoModule.model;
// iOS: "iPhone", "iPad"
// Android: Device-specific model name

systemName: string

Operating system name.

const systemName = DeviceInfoModule.systemName;
// iOS: "iOS" or "iPadOS"
// Android: "Android"

systemVersion: string

Operating system version string.

const systemVersion = DeviceInfoModule.systemVersion;
// iOS: "15.0", "16.2.1"
// Android: "12", "13", "14"

deviceType: DeviceType

Device type category.

const deviceType = DeviceInfoModule.deviceType;
// "Handset" | "Tablet" | "Tv" | "Desktop" | "GamingConsole" | "unknown"

uniqueId: string

Get unique device identifier.

const uniqueId = DeviceInfoModule.uniqueId;
// iOS: IDFV (Identifier for Vendor)
// Android: ANDROID_ID
// Example: "FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9"
  • iOS: Persists across app installs from the same vendor
  • Android: Usually persists across app installs

manufacturer: string

Get device manufacturer name.

const manufacturer = DeviceInfoModule.manufacturer;
// iOS: "Apple"
// Android: "Samsung", "Google", "Xiaomi", etc.

deviceName: string

Get user-assigned device name.

const deviceName = DeviceInfoModule.deviceName;
// Example: "John's iPhone", "My Galaxy S21"

Device Capabilities (7 APIs)

Boolean checks for device features and hardware availability.

isTablet: boolean

Check if device is a tablet.

const isTablet = DeviceInfoModule.isTablet;
// iPad → true
// iPhone → false
  • iOS: Based on UIDevice.userInterfaceIdiom
  • Android: Based on smallest screen width >= 600dp

isEmulator: boolean

Check if running in simulator/emulator.

const isEmulator = DeviceInfoModule.isEmulator;

deviceYearClass: number

Get estimated device year class based on hardware specifications.

const yearClass = DeviceInfoModule.deviceYearClass;

if (yearClass >= 2020) {
  enableHighEndFeatures();
} else if (yearClass >= 2015) {
  enableStandardFeatures();
} else {
  enableLowEndFeatures();
}

Returns an estimated "year class" representing when this device's hardware would have been considered flagship/high-end. Based on extended Facebook device-year-class algorithm updated for 2025.

RAM → Year Class mapping:

RAM Year Class Example Devices
≤2 GB 2013 Budget devices
≤4 GB 2015 Mid-range 2015-2016
≤6 GB 2017 Flagship 2017-2018
≤8 GB 2019 Flagship 2019-2020
≤12 GB 2021 Flagship 2021-2022
≤16 GB 2023 Flagship 2023-2024
>16 GB 2025 Latest flagships

isCameraPresent: boolean

Check if camera is available.

const hasCamera = DeviceInfoModule.isCameraPresent;

isPinOrFingerprintSet: boolean

Check if PIN, fingerprint, or Face ID is configured.

const isSecure = DeviceInfoModule.isPinOrFingerprintSet;

isHardwareKeyStoreAvailable: boolean

Check if hardware-backed cryptographic key storage is available on the device.

const hasHardwareKeyStore = DeviceInfoModule.isHardwareKeyStoreAvailable;

if (hasHardwareKeyStore) {
  console.log('Hardware-backed key storage available');
  // Safe to store sensitive cryptographic keys
} else {
  console.log('No hardware-backed storage');
  // Use alternative security measures
}

Platform: Android, iOS (except for iOS Emulator)

isLowRamDevice: boolean

Check if device is classified as low RAM device.

const isLowRam = DeviceInfoModule.isLowRamDevice;
// Android API 19+: true/false
// iOS: false

Platform: Android API 19+


Display & Screen (7 APIs)

Screen and display-related properties.

getHasNotch(): boolean

Check if device has a display notch.

const hasNotch = DeviceInfoModule.getHasNotch();
// iPhone X, 11, 12, 13 → true
// iPhone SE, 8 → false
  • iOS only - Detects iPhone X and later models
  • Android: Always returns false

getHasDynamicIsland(): boolean

Check if device has Dynamic Island.

const hasDynamicIsland = DeviceInfoModule.getHasDynamicIsland();
// iPhone 14 Pro, 15 Pro → true
// iPhone 14, 13 → false
  • iOS 16+ only - iPhone 14 Pro and later
  • Android: Always returns false

isDisplayZoomed: boolean

Check if iOS Display Zoom is enabled.

const isZoomed = DeviceInfoModule.isDisplayZoomed;
// iOS: true/false based on display zoom setting
// Android: false

Platform: iOS only

getIsLandscape(): boolean

Check if device is in landscape orientation.

const isLandscape = DeviceInfoModule.getIsLandscape();

getBrightness(): number

Get current screen brightness level (0.0 to 1.0).

const brightness = DeviceInfoModule.getBrightness();
console.log(`Brightness: ${(brightness * 100).toFixed(0)}%`);
// iOS: 0.0 to 1.0
// Android: -1

Platform: iOS only

getFontScale(): number

Get current font scale multiplier.

const fontScale = DeviceInfoModule.getFontScale();
// Example: 1.0 (normal), 1.2 (large), 0.85 (small)

isLiquidGlassAvailable: boolean

Check if the liquid glass effect is available on the device.

const hasLiquidGlass = DeviceInfoModule.isLiquidGlassAvailable;

if (hasLiquidGlass) {
  console.log('Liquid glass effect available');
  // Can use new iOS 26+ design features
} else {
  console.log('Liquid glass not available');
  // Fallback to standard UI
}

Platform: iOS 26.0+


System Resources (7 APIs)

Memory, storage, and uptime information.

totalMemory: number

Get total device RAM in bytes.

const totalMemory = DeviceInfoModule.totalMemory;
// Example: 6442450944 (6 GB)
console.log(`Total RAM: ${(totalMemory / 1024 / 1024 / 1024).toFixed(1)}GB`);

getUsedMemory(): number

Get current app memory usage in bytes.

const usedMemory = DeviceInfoModule.getUsedMemory();
// Example: 134217728 (128 MB)
console.log(`Used Memory: ${(usedMemory / 1024 / 1024).toFixed(0)}MB`);

maxMemory: number

Get maximum memory available to app (in bytes).

const maxMemory = DeviceInfoModule.maxMemory;
// Android: max heap size
// iOS: -1

Platform: Android only

totalDiskCapacity: number

Get total internal storage size in bytes.

const totalDisk = DeviceInfoModule.totalDiskCapacity;
// Example: 128849018880 (120 GB)
console.log(`Total Storage: ${(totalDisk / 1024 / 1024 / 1024).toFixed(0)}GB`);

getFreeDiskStorage(): number

Get available free storage space in bytes.

const freeDisk = DeviceInfoModule.getFreeDiskStorage();
// Example: 51539607552 (48 GB)
console.log(`Free Storage: ${(freeDisk / 1024 / 1024 / 1024).toFixed(1)}GB`);

getUptime(): number

Get device uptime since boot in milliseconds, excluding deep sleep time.

const uptime = DeviceInfoModule.getUptime();
const hours = Math.floor(uptime / 1000 / 60 / 60);
const minutes = Math.floor((uptime / 1000 / 60) % 60);
console.log(`Device running for ${hours}h ${minutes}m`);

Platform behavior:

  • iOS: Uses systemUptime (excludes deep sleep)
  • Android: Uses uptimeMillis() (excludes deep sleep)

Both platforms return consistent "active time" since boot, matching the behavior of expo-device.getUptimeAsync().

startupTime: number

Get device boot time (milliseconds since epoch).

const bootTime = DeviceInfoModule.startupTime;
const bootDate = new Date(bootTime);
console.log(`Device booted: ${bootDate.toLocaleString()}`);

Note: Returns boot time, NOT app startup time


Battery & Power (4 APIs)

Battery and power state information.

getBatteryLevel(): number

Get current battery level (0.0 to 1.0).

const batteryLevel = DeviceInfoModule.getBatteryLevel();
console.log(`Battery: ${(batteryLevel * 100).toFixed(0)}%`);
// Output: "Battery: 75%"

getPowerState(): PowerState

Get comprehensive power state information.

const powerState = DeviceInfoModule.getPowerState();
console.log(`Battery: ${(powerState.batteryLevel * 100).toFixed(0)}%`);
console.log(`Status: ${powerState.batteryState}`);
console.log(`Low Power Mode: ${powerState.lowPowerMode}`); // iOS only

PowerState interface:

interface PowerState {
  batteryLevel: number; // 0.0 to 1.0
  batteryState: BatteryState; // 'unknown' | 'unplugged' | 'charging' | 'full'
  lowPowerMode: boolean; // iOS only
}

getIsBatteryCharging(): boolean

Check if battery is currently charging.

const isCharging = DeviceInfoModule.getIsBatteryCharging();

isLowBatteryLevel(threshold: number): boolean

Check if battery level is below threshold.

const isLowBattery = DeviceInfoModule.isLowBatteryLevel(0.2); // 20%
if (isLowBattery) {
  console.log('Battery is low, please charge');
}

Application Metadata (9 APIs)

App bundle and version information.

version: string

Get application version string.

const version = DeviceInfoModule.version;
// Example: "1.2.3"

buildNumber: string

Get application build number.

const buildNumber = DeviceInfoModule.buildNumber;
// Example: "42" or "20231025"

bundleId: string

Get bundle ID (iOS) or package name (Android).

const bundleId = DeviceInfoModule.bundleId;
// Example: "com.company.app"

applicationName: string

Get application display name.

const appName = DeviceInfoModule.applicationName;
// Example: "My Awesome App"

readableVersion: string

Get human-readable version string (version.buildNumber).

const readableVersion = DeviceInfoModule.readableVersion;
// Example: "1.2.3.42"

getFirstInstallTime(): Promise<number>

Get timestamp when app was first installed (ms since epoch).

const installTime = await DeviceInfoModule.getFirstInstallTime();
const installDate = new Date(installTime);
console.log(`Installed: ${installDate.toLocaleDateString()}`);

Performance: ~10-30ms

getLastUpdateTime(): Promise<number>

Get timestamp of most recent app update (ms since epoch).

const updateTime = await DeviceInfoModule.getLastUpdateTime();
const updateDate = new Date(updateTime);
console.log(`Last Updated: ${updateDate.toLocaleDateString()}`);

Performance: ~10-30ms Note: Returns -1 on iOS

firstInstallTimeSync: number

Synchronous variant (uses cached value from module initialization).

const firstInstallTimeSync = DeviceInfoModule.firstInstallTimeSync;

lastUpdateTimeSync: number

Synchronous variant (returns -1 on iOS).

const lastUpdateTimeSync = DeviceInfoModule.lastUpdateTimeSync;

Network (6 APIs)

Network connectivity APIs (excluding carrier).

getIpAddress(): Promise<string>

Get device local IP address.

const ipAddress = await DeviceInfoModule.getIpAddress();
// Example: "192.168.1.100", "10.0.0.5"

Performance: ~20-50ms

getIpAddressSync(): string

Synchronous variant (with 5-second cache).

const ipAddressSync = DeviceInfoModule.getIpAddressSync();

getMacAddress(): Promise<string>

Get device MAC address.

const macAddress = await DeviceInfoModule.getMacAddress();
// iOS: "02:00:00:00:00:00" (hardcoded since iOS 7 for privacy)
// Android: "00:11:22:33:44:55" (actual MAC)

Performance: ~20-50ms

getMacAddressSync(): string

Synchronous variant.

const macAddressSync = DeviceInfoModule.getMacAddressSync();

getUserAgent(): Promise<string>

Get HTTP User-Agent string.

const userAgent = await DeviceInfoModule.getUserAgent();
// Example: "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) ..."

Performance:

  • iOS: 100-500ms (requires WebView initialization, cached after first call)
  • Android: sync capable

getIsAirplaneMode(): boolean

Check if airplane mode is enabled.

const isAirplaneMode = DeviceInfoModule.getIsAirplaneMode();
// Android: true/false
// iOS: false (not available)

Platform: Android only


Carrier Information (7 APIs)

Cellular carrier data for telecom apps, analytics, and geo-detection.

getCarrier(): Promise<string>

Get cellular carrier name.

const carrier = await DeviceInfoModule.getCarrier();
// Example: "Verizon", "AT&T", "T-Mobile"

Performance: ~20-50ms

getCarrierSync(): string

Synchronous variant (with 5-second cache).

const carrierSync = DeviceInfoModule.getCarrierSync();

carrierAllowsVOIP: boolean

Check if carrier allows VoIP calls on its network.

const allowsVOIP = DeviceInfoModule.carrierAllowsVOIP;
// iOS: true/false based on carrier policy
// Android: always true (no equivalent API)

Platform: iOS only (always returns true on Android)

carrierIsoCountryCode: string

Get ISO 3166-1 alpha-2 country code for the carrier.

const countryCode = DeviceInfoModule.carrierIsoCountryCode;
// Example: "US", "KR", "JP", "DE"
// Returns "" if no SIM card

mobileCountryCode: string

Get Mobile Country Code (MCC) per ITU-T Recommendation E.212.

const mcc = DeviceInfoModule.mobileCountryCode;
// Example: "310" (USA), "450" (Korea), "440" (Japan)
// Returns "" if no carrier

Common MCC values:

Country MCC
USA 310-316
Korea 450
Japan 440-441
China 460
Germany 262

mobileNetworkCode: string

Get Mobile Network Code (MNC) that identifies the carrier within a country.

const mnc = DeviceInfoModule.mobileNetworkCode;
// Example: "260" (T-Mobile US), "05" (SKT Korea)
// Returns "" if no carrier

mobileNetworkOperator: string

Get combined MCC + MNC string.

const operator = DeviceInfoModule.mobileNetworkOperator;
// Example: "310260" (T-Mobile US), "45005" (SKT Korea)
// Equivalent to: mobileCountryCode + mobileNetworkCode
// Returns "" if no carrier

Use cases:

  • Carrier-specific feature toggling
  • Regional content delivery
  • Telecom analytics
  • Fraud detection (geo-location verification)

Audio Accessories (4 APIs)

Audio device detection.

isHeadphonesConnected(): Promise<boolean>

Check if headphones are connected (wired or Bluetooth).

const hasHeadphones = await DeviceInfoModule.isHeadphonesConnected();

Performance: ~10-30ms

getIsHeadphonesConnected(): boolean

Synchronous variant.

const isHeadphonesConnected = DeviceInfoModule.getIsHeadphonesConnected();

getIsWiredHeadphonesConnected(): boolean

Check if wired headphones are connected.

const hasWiredHeadphones = DeviceInfoModule.getIsWiredHeadphonesConnected();

getIsBluetoothHeadphonesConnected(): boolean

Check if Bluetooth headphones are connected.

const hasBluetoothHeadphones = DeviceInfoModule.getIsBluetoothHeadphonesConnected();

Location Services (3 APIs)

Location provider information.

isLocationEnabled(): Promise<boolean>

Check if location services are enabled.

const isLocationEnabled = await DeviceInfoModule.isLocationEnabled();

Performance: ~10-30ms

getIsLocationEnabled(): boolean

Synchronous variant.

const isLocationEnabled = DeviceInfoModule.getIsLocationEnabled();

getAvailableLocationProviders(): string[]

Get list of enabled location providers.

const providers = DeviceInfoModule.getAvailableLocationProviders();
// ["gps", "network"]

Localization (1 API)

Language and regional settings.

systemLanguage: string

Get device system language in BCP 47 format.

const language = DeviceInfoModule.systemLanguage;
// iOS: "en-US", "ko-KR", "ja-JP", "zh-Hans-CN"
// Android: "en-US", "ko-KR", "ja-JP", "zh-Hans-CN"

Examples:

Language Code
English (US) en-US
Korean ko-KR
Japanese ja-JP
Simplified Chinese zh-Hans-CN
French (France) fr-FR
German de-DE

Use Case:

const language = DeviceInfoModule.systemLanguage;

if (language.startsWith('ko')) {
  console.log('Korean device detected');
} else if (language.startsWith('ja')) {
  console.log('Japanese device detected');
}

CPU & Architecture (3 APIs)

Processor and ABI information.

supportedAbis: string[]

Get supported CPU architectures.

const abis = DeviceInfoModule.supportedAbis;
// iOS: ["arm64"]
// Android: ["arm64-v8a", "armeabi-v7a"]

supported32BitAbis: string[]

Get list of supported 32-bit ABIs.

const abis32 = DeviceInfoModule.supported32BitAbis;
// iOS: []
// Android API 21+: ["armeabi-v7a", "x86"]

Platform: Android API 21+, returns [] on iOS

supported64BitAbis: string[]

Get list of supported 64-bit ABIs.

const abis64 = DeviceInfoModule.supported64BitAbis;
// iOS: ["arm64"]
// Android API 21+: ["arm64-v8a", "x86_64"]

Android Platform (20+ APIs)

Android-specific APIs and build information.

apiLevel: number

Get Android API level.

const apiLevel = DeviceInfoModule.apiLevel;
// Android 12 → 31
// Android 13 → 33
// iOS → -1

Platform: Android only

Get Android navigation mode.

const navMode = DeviceInfoModule.navigationMode;
// Android with gesture nav → "gesture"
// Android with 3-button nav → "buttons"
// Android with 2-button nav → "twobuttons"
// iOS → "unknown"

Type: 'gesture' | 'buttons' | 'twobuttons' | 'unknown'

Platform: Android only (returns "unknown" on iOS)

Values:

Value Description
gesture Full gesture navigation (swipe-based)
buttons Traditional 3-button navigation (Back, Home, Recent)
twobuttons 2-button navigation (Back, Home with swipe up)
unknown Cannot determine (always on iOS)

Use Case:

const navMode = DeviceInfoModule.navigationMode;

if (navMode === 'gesture') {
  // Avoid bottom gesture conflicts
  // Add extra bottom padding for bottom sheets
  console.log('Using gesture navigation - add extra padding');
} else if (navMode === 'buttons') {
  // Traditional navigation bar is present
  console.log('Using button navigation');
}

Note: Navigation mode detection requires Android 10 (API 29) or later. On older Android versions, returns "buttons" since gesture navigation was not available.

getHasGms(): boolean

Check if Google Mobile Services is available.

const hasGms = DeviceInfoModule.getHasGms();
// Android with Play Services → true
// Huawei devices without GMS → false
// iOS → false

Platform: Android only

getHasHms(): boolean

Check if Huawei Mobile Services is available.

const hasHms = DeviceInfoModule.getHasHms();
// Huawei devices → true
// Other Android/iOS → false

Platform: Android (Huawei devices) only

hasSystemFeature(feature: string): boolean

Check if specific system feature is available.

const hasNfc = DeviceInfoModule.hasSystemFeature('android.hardware.nfc');
// Android → true/false based on hardware
// iOS → false

Platform: Android only

Common features:

  • android.hardware.camera
  • android.hardware.nfc
  • android.hardware.bluetooth
  • android.hardware.wifi

systemAvailableFeatures: string[]

Get list of all available system features.

const features = DeviceInfoModule.systemAvailableFeatures;
// Android: ["android.hardware.camera", "android.hardware.nfc", ...]
// iOS: []

Platform: Android only

supportedMediaTypeList: string[]

Get list of supported media/codec types.

const mediaTypes = DeviceInfoModule.supportedMediaTypeList;
// Android: ["video/avc", "audio/mp4a-latm", ...]
// iOS: []

Platform: Android only

Android Build Information

Synchronous properties providing Android system build information.

Platform: Android only (all return "unknown" or default values on iOS)

const serialNumber = DeviceInfoModule.serialNumber; // Requires READ_PHONE_STATE on Android 8.0+
const androidId = DeviceInfoModule.androidId;
const previewSdkInt = DeviceInfoModule.previewSdkInt; // Android API 23+, 0 for release
const securityPatch = DeviceInfoModule.securityPatch; // Android API 23+, "YYYY-MM-DD"
const codename = DeviceInfoModule.codename; // "REL" for release
const incremental = DeviceInfoModule.incremental;
const board = DeviceInfoModule.board;
const bootloader = DeviceInfoModule.bootloader;
const device = DeviceInfoModule.device; // Board/platform name
const display = DeviceInfoModule.display; // Build display ID
const fingerprint = DeviceInfoModule.fingerprint; // Unique build identifier
const hardware = DeviceInfoModule.hardware;
const host = DeviceInfoModule.host; // Build host machine
const product = DeviceInfoModule.product;
const tags = DeviceInfoModule.tags; // Comma-separated
const type = DeviceInfoModule.type; // "user", "userdebug", "eng"
const baseOs = DeviceInfoModule.baseOs; // Android API 23+
const radioVersion = DeviceInfoModule.radioVersion;
const buildId = DeviceInfoModule.buildId;

iOS Platform (2 APIs)

iOS-specific APIs.

getDeviceToken(): Promise<string>

Get Apple DeviceCheck token.

try {
  const deviceToken = await DeviceInfoModule.getDeviceToken();
  console.log('DeviceCheck token:', deviceToken);
} catch (error) {
  console.error('DeviceCheck error:', error);
}

Performance: ~500-2000ms (network request to Apple servers) Platform: iOS 11+ only (throws error on Android)

syncUniqueId(): Promise<string>

Synchronize unique ID to iCloud Keychain.

const uniqueId = await DeviceInfoModule.syncUniqueId();
// iOS: Saves IDFV to Keychain (persists across reinstalls)
// Android: Returns getUniqueId() without Keychain sync

Performance: ~10-50ms (Keychain I/O) Platform: iOS (no-op on Android)


Installation & Distribution (3 APIs)

App installation and distribution metadata.

installerPackageName: string

Get package name of the app store that installed this app.

const installer = DeviceInfoModule.installerPackageName;
// iOS: "com.apple.AppStore", "com.apple.TestFlight"
// Android: "com.android.vending" (Play Store)

getInstallReferrer(): Promise<string>

Get install referrer information (Android Play Store).

const referrer = await DeviceInfoModule.getInstallReferrer();
// Android with Play Services: referrer data
// iOS: "unknown"

Performance: ~50-200ms (Play Services API call) Platform: Android only (requires Google Play Services)

isSideLoadingEnabled(): boolean

Check if sideloading (installing from unknown sources) is enabled.

const canSideload = DeviceInfoModule.isSideLoadingEnabled();

if (canSideload) {
  console.warn('Device allows sideloading - potential security risk');
}

Platform behavior difference:

  • Android 7 and below: Returns whether the device allows unknown sources globally (checks Settings.Global.INSTALL_NON_MARKET_APPS)
  • Android 8.0+: Returns whether THIS APP has permission to install other apps (per-app permission via canRequestPackageInstalls())
  • iOS: Always returns false (sideloading not possible without jailbreak)

Important: On Android 8.0+, even if the user has enabled "Install unknown apps" for other apps, this will return false unless they specifically granted permission to this app.

Use cases:

  • Security policy enforcement
  • Distribution channel detection
  • Enterprise deployment verification

Platform: Android (returns false on iOS)


Legacy Compatibility (2 APIs)

Deprecated APIs for backward compatibility.

totalDiskCapacityOld: number

Get total disk capacity using legacy Android API.

const totalDiskOld = DeviceInfoModule.totalDiskCapacityOld;
// Android: Uses old StatFs API (pre-Jelly Bean compatibility)
// iOS: Alias to totalDiskCapacity

getFreeDiskStorageOld(): number

Get free disk storage using legacy Android API.

const freeDiskOld = DeviceInfoModule.getFreeDiskStorageOld();
// Android: Uses old StatFs API (pre-Jelly Bean compatibility)
// iOS: Alias to getFreeDiskStorage()

Performance Notes

Synchronous Methods (<1ms)

All synchronous methods use cached values and return instantly:

  • Core device properties
  • Device capabilities
  • Display & screen
  • System resources (memory, disk)
  • Battery information
  • Application metadata
  • CPU & architecture

Asynchronous Methods

Performance varies by operation type:

  • Fast (10-30ms): Install times, location status, headphone detection
  • Medium (20-50ms): Network queries (IP, MAC, carrier)
  • Slow (100-500ms): UserAgent (iOS WebView init, cached after first call)
  • Very Slow (500-2000ms): DeviceCheck token (network request)

Caching

Network-related synchronous properties use 5-second caches:

  • getIpAddressSync()
  • getMacAddressSync()
  • getCarrierSync()

This provides fast access while keeping data reasonably fresh.


Platform Compatibility Matrix

Feature iOS Android Notes
Core device info All platforms
Device capabilities All platforms
Display & screen Notch/Dynamic Island iOS only
System resources All platforms
Battery info Low power mode iOS only
Application metadata All platforms
Network MAC hardcoded on iOS 7+
Carrier info (MCC/MNC) Empty string if no SIM
carrierAllowsVOIP ⚠️ Android always returns true
Audio accessories All platforms
Location services All platforms
Localization BCP 47 format
CPU & architecture All platforms
Android platform Android only
iOS platform iOS only
Installation metadata All platforms
Legacy compatibility All platforms
getUptime Both exclude deep sleep
deviceYearClass Extended 2025 algorithm
isSideLoadingEnabled Android only (per-app on 8.0+)
Navigation mode Android only (API 29+)
getHasNotch/Dynamic Island iOS only
Hardware KeyStore All platforms
GMS/HMS detection Android only
DeviceCheck iOS 11+ only
Display Zoom iOS only
Brightness iOS only
Liquid Glass iOS 26.0+ only (requires Xcode 16+)
System features Android only
Media codecs Android only

Next Steps

On this page