Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

cordova-plugin-sim

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cordova-plugin-sim

A plugin to get the device's SIM data (carrier name, mcc mnc, country code, telephonenumber, imei, etc)

  • 1.3.2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
198
decreased by-13.54%
Maintainers
1
Weekly downloads
 
Created
Source

cordova-plugin-sim

npm Code Climate Platform Donate

This is a cordova plugin to get data from the SIM card like the carrier name, mcc, mnc and country code and other system dependent additional info.

Installation

cordova plugin add cordova-plugin-sim

Supported Platforms

  • Android
  • iOS
  • Windows Phone 7 and 8

Usage

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
  window.plugins.sim.getSimInfo(successCallback, errorCallback);
}

function successCallback(result) {
  console.log(result);
}

function errorCallback(error) {
  console.log(error);
}

// Android only: check permission
function hasReadPermission() {
  window.plugins.sim.hasReadPermission(successCallback, errorCallback);
}

// Android only: request permission
function requestReadPermission() {
  window.plugins.sim.requestReadPermission(successCallback, errorCallback);
}

The plugin returns a JSON object. Return values:

  • carrierName: String - the Service Provider Name (SPN)
  • countryCode: String - the ISO country code equivalent for the SIM provider's country code
  • mcc: String - the MCC (mobile country code) of the provider of the SIM
  • mnc: String - the MNC (mobile network code) of the provider of the SIM

Field carrierName may remain empty, dependent on the mobile provider.

On Windows Phone access to countryCode, MCC and MNC is not made provided (returns empty string).

You can extract country and carrier data from MCC and MNC codes, read further on Wikipedia and ITU-T.

You can find the name of mobile provider using mcc-mnc-list npm package.

Android Quirks

Under the hood

This plugin uses two different Android APIs to receive SIM data:

  • TelephonyManager (since API level 1)
  • SubscriptionManager (since API level 22)

Since Android 6 (API level 23) a few methods of TelephonyManager require permission READ_PHONE_STATE.

All methods of SubscriptionManager require permission READ_PHONE_STATE.

SubscriptionManager is able to access multiple SIM data. The return object of this cordova plugin provides the details of the available sim cards in an array (cards).

Return object

  • carrierName: {String} Service Provider Name (SPN)
  • countryCode: {String} ISO country code equivalent for the SIM provider's country code
  • mcc: {String} MCC (mobile country code) of the provider of the SIM
  • mnc: {String} MNC (mobile network code) of the provider of the SIM
  • callState: {Number} call state (cellular) on the device
  • dataActivity: {Number} type of activity on a data connection (cellular)
  • networkType: {Number} the NETWORK_TYPE_xxxx for current data connection
  • phoneType: {Number} device phone type. This indicates the type of radio used to transmit voice calls
  • simState: {Number} the state of the device SIM card
  • isNetworkRoaming: {Boolean} true if the device is considered roaming on the current network, for GSM purposes
  • phoneCount: {Number} the number of phones available. Returns 0 if none of voice, sms, data is not supported. Returns 1 for Single standby mode (Single SIM functionality). Returns 2 for Dual standby mode (Dual SIM functionality)
  • activeSubscriptionInfoCount: {Number} [READ_PHONE_STATE] the current number of active subscriptions
  • activeSubscriptionInfoCountMax: {Number} [READ_PHONE_STATE] the maximum number of active subscriptions
  • phoneNumber: {String} [READ_PHONE_STATE] - phone number string for line 1, for example, the MSISDN for a GSM phone 1
  • deviceId: {String} [READ_PHONE_STATE] the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones
  • deviceSoftwareVersion: {String} [READ_PHONE_STATE] the software version number for the device, for example, the IMEI/SV for GSM phones
  • simSerialNumber: {String} [READ_PHONE_STATE] the serial number of the SIM, if applicable
  • subscriberId: {String} [READ_PHONE_STATE] the unique subscriber ID, for example, the IMSI for a GSM phone
  • cards: {Array} [READ_PHONE_STATE] List of SIM cards
    • carrierName: {String} the name displayed to the user that identifies Subscription provider name
    • displayName: {String} the name displayed to the user that identifies this subscription
    • countryCode: {String} the ISO country code
    • mcc: {String} MCC (mobile country code) of the provider of the SIM
    • mnc: {String} MNC (mobile network code) of the provider of the SIM
    • isNetworkRoaming: {Boolean} Returns true if the device is considered roaming on the current network for a subscription
    • isDataRoaming: {Boolean} the data roaming state for this subscription
    • simSlotIndex: {Number} the slot index of this Subscription's SIM card
    • phoneNumber: {String} the number of this subscription
    • deviceId: {String} the unique device ID of a subscription, for example, the IMEI for GSM and the MEID for CDMA phones
    • simSerialNumber: {String} ICC ID
    • subscriptionId: {String} Subscription Identifier, this is a device unique number

1) Notice: the content of phoneNumber is unreliable (see this and this article). Sometimes phoneNumber is only an empty string.

Android Emulator results

{
  "carrierName": "Android",
  "countryCode": "us",
  "mcc": "310",
  "mnc": "260",
  "phoneNumber": "15555215554",
  "deviceId": "0000000000000000",
  "simSerialNumber": "89014103211118510720",
  "subscriberId": "310260000000000",
  "callState": 0,
  "dataActivity": 0,
  "networkType": 3,
  "phoneType": 1,
  "simState": 5,
  "isNetworkRoaming": false
}

List of Call State Codes and Meanings

CodeConstantMeaning
0CALL_STATE_IDLENo activity
1CALL_STATE_RINGINGRinging. A new call arrived and is ringing or waiting. In the latter case, another call is already active.
2CALL_STATE_OFFHOOKOff-hook. At least one call exists that is dialing, active, or on hold, and no calls are ringing or waiting.

List of Data Activity Codes and Meanings

CodeConstantMeaning
0DATA_ACTIVITY_NONENo traffic.
1DATA_ACTIVITY_INCurrently receiving IP PPP traffic.
2DATA_ACTIVITY_OUTCurrently sending IP PPP traffic.
3DATA_ACTIVITY_INOUTCurrently both sending and receiving IP PPP traffic.
4DATA_ACTIVITY_DORMANTData connection is active, but physical link is down

List of Network Type Codes and Meanings

CodeConstantMeaning
0NETWORK_TYPE_UNKNOWNunknown
1NETWORK_TYPE_GPRSGPRS
2NETWORK_TYPE_EDGEEDGE
3NETWORK_TYPE_UMTSUMTS
4NETWORK_TYPE_CDMACDMA: Either IS95A or IS95B
5NETWORK_TYPE_EVDO_0EVDO revision 0
6NETWORK_TYPE_EVDO_AEVDO revision A
7NETWORK_TYPE_1xRTT1xRTT
8NETWORK_TYPE_HSDPAHSDPA
9NETWORK_TYPE_HSUPAHSUPA
10NETWORK_TYPE_HSPAHSPA
11NETWORK_TYPE_IDENiDen
12NETWORK_TYPE_EVDO_BEVDO revision B
13NETWORK_TYPE_LTELTE
14NETWORK_TYPE_EHRPDeHRPD
15NETWORK_TYPE_HSPAPHSPA+

List of Phone Type Codes and Meanings

CodeConstantMeaning
0PHONE_TYPE_NONEnone
1PHONE_TYPE_GSMGSM
2PHONE_TYPE_CDMACDMA
3PHONE_TYPE_SIPSIP

List of SIM State Codes and Meanings

CodeConstantMeaning
0SIM_STATE_UNKNOWNUnknown. Signifies that the SIM is in transition between states. For example, when the user inputs the SIM pin under PIN_REQUIRED state, a query for sim status returns this state before turning to SIM_STATE_READY.
1SIM_STATE_ABSENTNo SIM card is available in the device
2SIM_STATE_PIN_REQUIREDLocked: requires the user's SIM PIN to unlock
3SIM_STATE_PUK_REQUIREDLocked: requires the user's SIM PUK to unlock
4SIM_STATE_NETWORK_LOCKEDLocked: requires a network PIN to unlock
5SIM_STATE_READYReady

Android 6.0 Permissions

Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app.

If the device is running Android 6.0 or higher, and your app's target SDK is 23 or higher: The app has to list the permissions in the manifest, and it must request each dangerous permission it needs while the app is running. The user can grant or deny each permission, and the app can continue to run with limited capabilities even if the user denies a permission request.

Note: Beginning with Android 6.0 (API level 23), users can revoke permissions from any app at any time, even if the app targets a lower API level. You should test your app to verify that it behaves properly when it's missing a needed permission, regardless of what API level your app targets.

// check permission
function hasReadPermission() {
  window.plugins.sim.hasReadPermission(successCallback, errorCallback);
}

// request permission
function requestReadPermission() {
  window.plugins.sim.requestReadPermission(successCallback, errorCallback);
}

This plugin needs READ_PHONE_STATE permission for getting the following values:

  • phoneNumber
  • deviceId
  • deviceSoftwareVersion
  • simSerialNumber
  • subscriberId
  • activeSubscriptionInfoCount
  • activeSubscriptionInfoCountMax
  • multiple SIM card data

Wiki: How to test permissions

Build conflict with phonegap-facebook-plugin

Android SDK uses Gradle build tool to create Android builds. phonegap-facebook-plugin does not implement android-support-v4 dependency the recommended way, Gradle is not able to resolve the dependencies. The build process will fail.

I suggest to use another plugin for facebook usage:

iOS Quirks

Additional return value:

  • allowsVOIP: Boolean - indicates if the carrier allows VoIP calls to be made on its network

iOS Emulator results

{
  "carrierName": "",
  "countryCode": "",
  "mcc": "",
  "mnc": "",
  "allowsVOIP": false
}

Windows Phone Quirks

Additional return values:

  • isCellularDataEnabled: Boolean - indicates whether the network is cellular data enabled
  • isCellularDataRoamingEnabled: Boolean - indicates whether the network allows data roaming
  • isNetworkAvailable: Boolean - indicates whether the network interface is available
  • isWiFiEnabled: Boolean - indicates whether the network is Wi-Fi enabled

Author

Peter Bakondy

LICENSE

cordova-plugin-sim is licensed under the MIT Open Source license. For more information, see the LICENSE file in this repository.

Keywords

FAQs

Package last updated on 25 Nov 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc