A unified library merging features from multiple SIM card management libraries:
- Unified APIs for eSIM and SIM data management.
- Bug fixes and enhancements for improved stability.
- Simplified transition from previous libraries (requires some code adaptation).
Install the package using npm:
npm install react-native-sim-cards-manager
To debug device logs during eSIM setup, use the following command:
adb logcat | grep "Euicc"
- Minimum API Level: 22
- Add the following permission in
AndroidManifest.xml
forTelephonyManager
:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
For eSIM features:
- For regular apps, follow the instructions in the carrier privileges guide.
- For system apps, include the following permission:
<uses-permission android:name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" />
More details here.
- Minimum API Level: 12 (eSIM features)
- Requires eSIM entitlement. Learn more here.
Note: As of iOS 14.2, there is a known bug where an unknown result may be returned before completing eSIM setup. Details here.
Fetch a list of SIM cards. The result may contain no elements (if no SIM cards are detected) or multiple entries.
Handles permission requests and accepts an optional _rationale_
parameter.
import SimCardsManagerModule from 'react-native-sim-cards-manager';
SimCardsManagerModule.getSimCards({
title: 'App Permission',
message: 'Custom message',
buttonNeutral: 'Not now',
buttonNegative: 'Not OK',
buttonPositive: 'OK',
})
.then((array: Array<any>) => {
// Handle results
})
.catch((error) => {
// Handle errors
});
Used internally by getSimCards
. Does not handle permissions.
import SimCardsManagerModule from 'react-native-sim-cards-manager';
SimCardsManagerModule.getSimCardsNative()
.then((array: Array<any>) => {
// Handle results
})
.catch((error) => {
// Handle errors
});
Field | iOS | Android |
---|---|---|
carrierName | ✅ | ✅ |
displayName | ❌ | ✅ |
isoCountryCode | ✅ | ✅ |
mobileCountryCode | ✅ | ✅ |
mobileNetworkCode | ✅ | ✅ |
isNetworkRoaming | ❌ | ✅ |
isDataRoaming | ❌ | ✅ |
simSlotIndex | ❌ | ✅ |
phoneNumber | ❌ | ✅ |
simSerialNumber | ❌ | ✅ |
subscriptionId | ❌ | ✅ |
allowsVOIP | ✅ | ❌ |
Verify if the device supports eSIM functionality.
import SimCardsManagerModule from 'react-native-sim-cards-manager';
SimCardsManagerModule.isEsimSupported()
.then((isSupported: boolean) => {
// Handle result
})
.catch((error) => {
// Handle errors
});
Configure an eSIM using an activation code.
Field | Mandatory | Description |
---|---|---|
address | N/A | Carrier network's eSIM server address. |
confirmationCode | N/A | Confirmation code for eSIM provisioning. |
eid | N/A | eUICC identifier. |
iccid | N/A | Integrated Circuit Card Identifier. |
matchingId | N/A | Matching identifier for the eSIM profile. |
oid | N/A | Object Identifier for the provisioning request. |
Code | Description |
---|---|
0 | Feature not available. |
1 | Device does not support cellular plans. |
2 | OS failed to add the plan. |
3 (iOS) | Unknown OS error. |
3 (Android) | OS or Intent/Activity error. |
import SimCardsManagerModule from 'react-native-sim-cards-manager';
SimCardsManagerModule.setupEsim({
confirmationCode,
address: '',
})
.then((isPlanAdded: boolean) => {
// Handle success
})
.catch((error) => {
// Handle errors
});
- Fix Fix iOS LPA returning unknown before finishing eSIM setup by @Neeal20 in #91
- Fix Create Pending Intent with mutable flag to receive EUICC manager callback on Android 14 by @raffiot in #77
- Fix crash on android < sdk 28 by @MargusSalk in #83
- Fix Android flag MUTABLE to IMMUTABLE to solve an Android 14 issue
- Fix an issue introduced in 1.0.20
- Fix for Android 13 READ_PHONE_NUMBERS
- Fix for Android 14 registerReceiver()
- Fix iOS result success
- Fix setupEsim. Check for OS version P or above before continuing; return if below.
- Moved initMgr() to after the version check.
- Fix npm package; missing index.ts file
- Fix Android - get phone number on API 33
- Android -
sendPhoneCall
with phone number and SIM slot index
- Fix Issue when the OS requires user action
- Improve package generation and add types declaration (one more time!)
- Improve package generation and add types declaration
- Upgrade packages (detected CVE)
- Added an extra check on eSIM method for Android (hasCarrierPrivileges())
- Fix bug with missing MUTABLE flag on intent for Android
- Remove some useless logs
- Improve eSIM resolvable error
- Fix bug with EMBEDDED_SUBSCRIPTION_RESULT_ERROR #12
- Remove 'deviceID' on Android because it requires high privilege
- Adding permission management on Android (READ_PHONE_STATE)
- Android bug fixes
- First stable release
- iOS implementation
- Android implementation
- RN implementation
- Documentation & sample project
Read the Contributing Guide for details on how to contribute to the project.
MIT License.