Commit 0a374b58 authored by Naoto Ida's avatar Naoto Ida

Added iOS/Android support for getting carrier information

parent 589633a9
......@@ -193,7 +193,7 @@ var DeviceInfo = require('react-native-device-info');
| Serial Number | `getSerialNumber()` | `string` | Only supported in Android
| IP Address | `getIPAddress()` | `Promise<string>` | Only supported in Android
| MAC Address | `getMACAddress()` | `Promise<string>` | Only supported in Android
| Carrier | `getCarrier()` | `string` e.g. "SOFTBANK" | | |
Since the device setting for PIN/Fingerprint can be modified while the app is still open, this is available via callback instead of as a constant. To use, pass a callback function to the returned bridge function in your javascript:
```js
......
......@@ -14,6 +14,8 @@
@property (nonatomic) bool isEmulator;
@end
@import CoreTelephony;
@implementation RNDeviceInfo
@synthesize isEmulator;
......@@ -150,6 +152,13 @@ RCT_EXPORT_MODULE()
return deviceName;
}
- (NSString *) carrier
{
CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netinfo subscriberCellularProvider];
return carrier.carrierName;
}
- (NSString*) userAgent
{
#if TARGET_OS_TV
......@@ -204,6 +213,7 @@ RCT_EXPORT_MODULE()
@"appVersion": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"] ?: [NSNull null],
@"buildNumber": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"],
@"systemManufacturer": @"Apple",
@"carrier": self.carrier ?: [NSNull null],
@"userAgent": self.userAgent,
@"timezone": self.timezone,
@"isEmulator": @(self.isEmulator),
......
......@@ -107,6 +107,12 @@ public class RNDeviceModule extends ReactContextBaseJavaModule {
p.resolve(macAddress);
}
@ReactMethod
public String getCarrier() {
TelephonyManager telMgr = (TelephonyManager) this.reactContext.getSystemService(Context.TELEPHONY_SERVICE);
return telMgr.getNetworkOperatorName();
}
@Override
public @Nullable Map<String, Object> getConstants() {
HashMap<String, Object> constants = new HashMap<String, Object>();
......@@ -172,6 +178,7 @@ public class RNDeviceModule extends ReactContextBaseJavaModule {
TelephonyManager telMgr = (TelephonyManager) this.reactContext.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
constants.put("phoneNumber", telMgr.getLine1Number());
}
constants.put("carrier", this.getCarrier());
return constants;
}
}
......@@ -28,3 +28,4 @@ export function getIPAddress(): Promise<string>;
export function getMACAddress(): Promise<string>;
export function getPhoneNumber(): string;
export function getAPILevel(): number;
export function getCarrier(): string;
......@@ -5,40 +5,40 @@
var RNDeviceInfo = require('react-native').NativeModules.RNDeviceInfo;
module.exports = {
getUniqueID: function () {
getUniqueID: function() {
return RNDeviceInfo.uniqueId;
},
getInstanceID: function() {
return RNDeviceInfo.instanceId;
},
getSerialNumber: function () {
getSerialNumber: function() {
return RNDeviceInfo.serialNumber;
},
getIPAddress: function () {
getIPAddress: function() {
return RNDeviceInfo.getIpAddress();
},
getMACAddress: function () {
getMACAddress: function() {
return RNDeviceInfo.getMacAddress();
},
getDeviceId: function () {
getDeviceId: function() {
return RNDeviceInfo.deviceId;
},
getManufacturer: function () {
getManufacturer: function() {
return RNDeviceInfo.systemManufacturer;
},
getModel: function () {
getModel: function() {
return RNDeviceInfo.model;
},
getBrand: function () {
getBrand: function() {
return RNDeviceInfo.brand;
},
getSystemName: function () {
getSystemName: function() {
return RNDeviceInfo.systemName;
},
getSystemVersion: function () {
getSystemVersion: function() {
return RNDeviceInfo.systemVersion;
},
getAPILevel: function () {
getAPILevel: function() {
return RNDeviceInfo.apiLevel;
},
getBundleId: function() {
......@@ -51,7 +51,7 @@ module.exports = {
return RNDeviceInfo.appVersion;
},
getReadableVersion: function() {
return RNDeviceInfo.appVersion + "." + RNDeviceInfo.buildNumber;
return RNDeviceInfo.appVersion + '.' + RNDeviceInfo.buildNumber;
},
getDeviceName: function() {
return RNDeviceInfo.deviceName;
......@@ -74,16 +74,19 @@ module.exports = {
isTablet: function() {
return RNDeviceInfo.isTablet;
},
isPinOrFingerprintSet: function () {
isPinOrFingerprintSet: function() {
return RNDeviceInfo.isPinOrFingerprintSet;
},
getFirstInstallTime: function () {
getFirstInstallTime: function() {
return RNDeviceInfo.firstInstallTime;
},
getLastUpdateTime: function () {
getLastUpdateTime: function() {
return RNDeviceInfo.lastUpdateTime;
},
getPhoneNumber: function () {
getPhoneNumber: function() {
return RNDeviceInfo.phoneNumber;
}
},
getCarrier: function() {
return RNDeviceInfo.carrier;
},
};
......@@ -28,4 +28,5 @@ declare module.exports: {
getSerialNumber: () => string,
getIPAddress: () => Promise<string>,
getMACAddress: () => Promise<string>,
getCarrier: () => string,
}
......@@ -112,6 +112,7 @@ namespace RNDeviceInfo
constants["timezone"] = TimeZoneInfo.Local.Id;
constants["isEmulator"] = IsEmulator(model);
constants["isTablet"] = IsTablet(os);
constants["carrier"] = "not available";
return constants;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment