React Native 的设备信息。
您的 iOS Podfile 需要升级到 iOS 10 最低版本。该模块 v7 不再支持 iOS9。
使用 npm:
npm install --save react-native-device-info
或使用纱线:
yarn add react-native-device-info
如果您想使用 Install Referrer 跟踪,您需要将此配置添加到您的 Proguard 配置中
-keep class com.android.installreferrer.api.** {
*;
}
如果您在发布的 apk 上遇到 hasGms() 问题,请将以下规则添加到您的 Proguard 配置中
-keep class com.google.android.gms.common.** {*;}
该模块默认为 AndroidX,您应该在android/build.gradle
文件的“ext”块中配置与此类似的库版本
.. .
ext {
// dependency versions
We have 3 options for deviceId :
// Option 1 (latest):
firebaseIidVersion = " 19.0.1 " // default: "19.0.1"
// Option 2 (legacy GooglePlay dependency but using AndroidX):
googlePlayServicesIidVersion = " 17.0.0 " // default: "17.0.0" - AndroidX
// Option 3 (legacy GooglePlay dependency before AndroidX):
googlePlayServicesIidVersion = " 16.0.1 "
// include as needed:
compileSdkVersion = " 28 " // default: 28 (28 is required for AndroidX)
targetSdkVersion = " 28 " // default: 28 (28 is required for AndroidX)
supportLibVersion = ' 1.0.2 ' // Use '28.0.0' or don't specify for old libraries, '1.0.2' or similar for AndroidX
mediaCompatVersion = ' 1.0.1 ' // Do not specify if using old libraries, specify '1.0.1' or similar for androidx.media:media dependency
supportV4Version = ' 1.0.0 ' // Do not specify if using old libraries, specify '1.0.0' or similar for androidx.legacy:legacy-support-v4 dependency
}
.. .
如果您需要非 AndroidX,则需要以反向模式使用 jetifier 包,该包提供了文档。
对于新的 React-Native 开发人员来说,原生模块中的链接是一个常见的麻烦来源,导致诸如“RNDeviceInfo is null”等错误。因此,实现了自动链接,并且应该在您的项目中使用它。
所有平台都支持自动链接(甚至是 React Native >= 0.63 上的 Windows!)
以前的版本需要手动链接。不为这些以前的react-native版本提供支持,但如果您愿意,可以参考本自述文件的旧版本。升级到现代版本的react-native。如果需要,请使用互联网上的upgrade-helper
工具。
import DeviceInfo from 'react-native-device-info' ;
// or ES6+ destructured imports
import { getUniqueId , getManufacturer } from 'react-native-device-info' ;
请注意,许多 API 都是特定于平台的。如果平台没有实现,那么您将收到的“默认”返回值对于字符串是"unknown"
,对于数字是-1
,对于布尔值是false
。数组和对象将为空(分别为[]
和{}
)。
大多数API都会返回一个Promise,但也有相应的API,末尾带有Sync
,同步运行。例如,您可能更愿意在应用程序引导期间调用isCameraPresentSync()
以避免在应用程序启动的第一部分期间进行异步调用。
关于 getUserAgentSync 的注意事项
虽然异步方法getUserAgent
在两个平台上均可用, getUserAgentSync
仅在 Android 上受支持。
此存储库中的示例应用程序显示了每个 API 的示例用法,如果您有疑问,请查阅示例应用程序,如果您认为发现问题,请确保在报告问题之前可以使用示例应用程序重现它,谢谢。
方法 | 返回类型 | iOS系统 | 安卓 | 视窗 | 网络 | 视觉操作系统 |
---|---|---|---|---|---|---|
获取AndroidId() | Promise<string> | ✅ | ||||
getApiLevel() | Promise<number> | ✅ | ||||
获取应用程序名称() | string | ✅ | ✅ | ✅ | ✅ | |
获取可用位置提供者() | Promise<Object> | ✅ | ✅ | ✅ | ||
获取BaseOs() | Promise<string> | ✅ | ✅ | ✅ | ||
获取构建Id() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
获取电池电量() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
获取引导加载程序() | Promise<string> | ✅ | ||||
获取品牌() | string | ✅ | ✅ | ✅ | ✅ | |
获取构建编号() | string | ✅ | ✅ | ✅ | ✅ | |
获取BundleId() | string | ✅ | ✅ | ✅ | ✅ | |
isCameraPresent() | Promise<boolean> | ✅ | ✅ | ✅ | ||
获取承运人() | Promise<string> | ✅ | ✅ | |||
获取代码名称() | Promise<string> | ✅ | ||||
获取设备() | Promise<string> | ✅ | ||||
获取设备ID() | string | ✅ | ✅ | ✅ | ✅ | |
获取设备类型() | string | ✅ | ✅ | ✅ | ||
获取显示() | Promise<string> | ✅ | ||||
获取设备名称() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
获取设备令牌() | Promise<string> | ✅ | ✅ | |||
获取首次安装时间() | Promise<number> | ✅ | ✅ | ✅ | ✅ | |
获取指纹() | Promise<string> | ✅ | ||||
获取字体比例() | Promise<number> | ✅ | ✅ | ✅ | ||
获取空闲磁盘存储() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
getFreeDiskStorageOld() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
获取硬件() | Promise<string> | ✅ | ||||
获取主机() | Promise<string> | ✅ | ✅ | |||
获取主机名() | Promise<string[]> | ✅ | ||||
获取IP地址() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
获取增量() | Promise<string> | ✅ | ||||
获取安装程序包名称() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
获取安装引用者() | Promise<string> | ✅ | ✅ | ✅ | ||
获取实例Id() | Promise<string> | ✅ | ||||
获取最后更新时间() | Promise<number> | ✅ | ||||
获取Mac地址() | Promise<string> | ✅ | ✅ | ✅ | ||
获取制造商() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
获取最大内存() | Promise<number> | ✅ | ✅ | ✅ | ||
获取模型() | string | ✅ | ✅ | ✅ | ✅ | |
获取电源状态() | Promise<object> | ✅ | ✅ | ✅ | ✅ | ✅ |
获取产品() | Promise<string> | ✅ | ||||
getPreviewSdkInt() | Promise<number> | ✅ | ||||
获取可读版本() | string | ✅ | ✅ | ✅ | ✅ | |
获取序列号() | Promise<string> | ✅ | ✅ | |||
获取安全补丁() | Promise<string> | ✅ | ||||
获取启动时间() | Promise<number> | ✅ | ✅ | ✅ | ||
获取系统可用功能() | Promise<string[]> | ✅ | ||||
获取系统名称() | string | ✅ | ✅ | ✅ | ✅ | |
获取系统版本() | string | ✅ | ✅ | ✅ | ✅ | |
获取标签() | Promise<string> | ✅ | ||||
获取类型() | Promise<string> | ✅ | ||||
获取磁盘总容量() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalDiskCapacityOld() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
获取总内存() | Promise<number> | ✅ | ✅ | ✅ | ✅ | |
获取唯一ID() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
获取已用内存() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
获取用户代理() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
获取用户代理同步() | string | ✅ | ✅ | |||
获取版本() | string | ✅ | ✅ | ✅ | ✅ | |
获取亮度() | Promise<number> | ✅ | ||||
有Gms() | Promise<boolean> | ✅ | ||||
hasHms() | Promise<boolean> | ✅ | ||||
hasNotch() | boolean | ✅ | ✅ | ✅ | ✅ | |
有动态岛() | boolean | ✅ | ✅ | ✅ | ✅ | |
有系统功能() | Promise<boolean> | ✅ | ||||
isAirplaneMode() | Promise<boolean> | ✅ | ✅ | |||
正在电池充电() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | ✅ |
是模拟器() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | |
isKeyboardConnected() | Promise<bool> | ✅ | ||||
是风景() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | |
isLocationEnabled() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | |
isMouseConnected() | Promise<bool> | ✅ | ||||
isHeadphonesConnected() | Promise<boolean> | ✅ | ✅ | ✅ | ||
isWiredHeadphonesConnected() | Promise<boolean> | ✅ | ✅ | ✅ | ||
isBluetoothHeadphonesConnected() | Promise<boolean> | ✅ | ✅ | ✅ | ||
isPinOrFingerprintSet() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | |
isTablet() | boolean | ✅ | ✅ | ✅ | ✅ | |
isLowRamDevice() | boolean | ✅ | ||||
isDisplayZoomed() | boolean | ✅ | ||||
isTabletMode() | Promise<bool> | ✅ | ||||
支持32BitAbis() | Promise<string[]> | ✅ | ||||
支持64BitAbis() | Promise<string[]> | ✅ | ||||
支持Abis() | Promise<string[]> | ✅ | ✅ | ✅ | ✅ | |
同步唯一ID() | Promise<string> | ✅ | ✅ | |||
获取支持的媒体类型列表() | Promise<string[]> | ✅ |
获取API级别。
DeviceInfo . getApiLevel ( ) . then ( ( apiLevel ) => {
// iOS: ?
// Android: 25
// Windows: ?
} ) ;
查看 API 级别
获取 ANDROID_ID。请参阅 API 文档以了解正确的使用方式。
DeviceInfo . getAndroidId ( ) . then ( ( androidId ) => {
// androidId here
} ) ;
获取应用程序名称。
let appName = DeviceInfo . getApplicationName ( ) ;
// AwesomeApp
产品所基于的基本操作系统构建。
DeviceInfo . getBaseOs ( ) . then ( ( baseOs ) => {
// "Windows", "Android" etc
} ) ;
获取设备的电池电量(0 到 1 之间的浮点数)。
DeviceInfo . getBatteryLevel ( ) . then ( ( batteryLevel ) => {
// 0.759999
} ) ;
为了能够获得实际的电池电量,请启用应用程序的电池监控模式。添加此代码:
[UIDevice currentDevice ].batteryMonitoringEnabled = true ;
到 AppDelegate.m 应用程序:didFinishLaunchingWithOptions:
在 iOS 模拟器上返回 -1
系统引导加载程序版本号。
DeviceInfo . getBootloader ( ) . then ( ( bootloader ) => {
// "mw8998-002.0069.00"
} ) ;
获取设备品牌。
let brand = DeviceInfo . getBrand ( ) ;
// iOS: "Apple"
// Android: "xiaomi"
// Windows: ?
获取应用程序内部版本号。
let buildNumber = DeviceInfo . getBuildNumber ( ) ;
// iOS: "89"
// Android: "4"
// Windows: ?
获取应用程序包标识符。
let bundleId = DeviceInfo . getBundleId ( ) ;
// "com.example.AwesomeApp"
告知设备现在是否有摄像头。
DeviceInfo . isCameraPresent ( )
. then ( ( isCameraPresent ) => {
// true or false
} )
. catch ( ( cameraAccessException ) => {
// is thrown if a camera device could not be queried or opened by the CameraManager on Android
} ) ;
- 支持摄像机的热添加/删除。
- 返回相机物理存在的状态。如果相机存在,但您的应用程序无权使用它,isCameraPresent 仍将返回 true
获取运营商名称(网络运营商)。
DeviceInfo . getCarrier ( ) . then ( ( carrier ) => {
// "SOFTBANK"
} ) ;
当前的开发代号,或者字符串“REL”(如果这是发布版本)。
DeviceInfo . getCodename ( ) . then ( ( codename ) => {
// "REL"
} ) ;
工业品外观设计的名称。
DeviceInfo . getDevice ( ) . then ( ( device ) => {
// "walleye"
} ) ;
获取设备ID。
let deviceId = DeviceInfo . getDeviceId ( ) ;
// iOS: "iPhone7,2"
// Android: "goldfish"
// Windows: "Y3R94UC#AC4"
用于向用户显示的构建 ID 字符串。
DeviceInfo . getDisplay ( ) . then ( ( display ) => {
// "OPM2.171026.006.G1"
} ) ;
获取设备名称。
DeviceInfo . getDeviceName ( ) . then ( ( deviceName ) => {
// iOS: "Becca's iPhone 6"
// Android: ?
// Windows: ?
} ) ;
这曾经需要 android.permission.BLUETOOTH 但 v3 中的新实现不需要它。如果您有此 API,则可以从 AndroidManifest.xml 中删除它。 iOS 16 及更高版本需要有权访问用户定义的设备名称,否则将返回通用值(即“iPad”、“iPhone”)
获取设备令牌(请参阅DeviceCheck)。仅适用于真实设备上的 iOS 11.0+。当不支持 getDeviceToken 时,这将拒绝承诺,请小心异常处理。
DeviceInfo . getDeviceToken ( ) . then ( ( deviceToken ) => {
// iOS: "a2Jqsd0kanz..."
} ) ;
获取应用程序首次安装的时间(以毫秒为单位)。
DeviceInfo . getFirstInstallTime ( ) . then ( ( firstInstallTime ) => {
// Android: 1517681764528
} ) ;
唯一标识此构建的字符串。
DeviceInfo . getFingerprint ( ) . then ( ( fingerprint ) => {
// "google/walleye/walleye:8.1.0/OPM2.171026.006.G1/4820017:user/release-keys"
} ) ;
获取设备字体比例。字体比例是当前系统字体与“正常”字体大小的比率,因此如果普通文本为 10pt 而系统字体当前为 15pt,则字体比例将为 1.5 这可用于确定是否已进行辅助功能设置针对设备进行了更改;如果字体比例明显更大(> 2.0),您可能需要重新布局某些视图
DeviceInfo . getFontScale ( ) . then ( ( fontScale ) => {
// 1.2
} ) ;
获取可用存储大小(以字节为单位)的方法,同时考虑根文件系统和数据文件系统的计算。
在iOS上,此方法接受以下可选参数:
'total'
:使用volumeAvailableCapacityKey
'important'
:使用volumeAvailableCapacityForImportantUsageKey
'opportunistic'
:使用volumeAvailableCapacityForOpportunisticUsageKey
有关更多详细信息,请参阅有关检查卷存储容量的 Apple 文档。
DeviceInfo . getFreeDiskStorage ( ) . then ( ( freeDiskStorage ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
DeviceInfo . getFreeDiskStorage ( 'important' ) . then ( ( freeDiskStorage ) => {
// iOS: 18198219342 (important storage)
} ) ;
此方法使用的 Android API 在 v6.0.0 中已更改。旧版本已在下面维护为getFreeDiskStorageOld()
。在 iOS 上, getFreeDiskStorage()
和getFreeDiskStorageOld()
返回相同的值。
获取可用存储大小(以字节为单位)的方法的旧实现。
DeviceInfo . getFreeDiskStorageOld ( ) . then ( ( freeDiskStorage ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
来自developer.android.com:
此方法在 API 级别 29 中已弃用。
返回主要共享/外部存储目录。
注意:不要对这里的“外部”一词感到困惑。该目录可以更好地被视为媒体/共享存储。它是一个可以容纳相对大量数据并且在所有应用程序之间共享的文件系统(不强制执行权限)。传统上,这是一张 SD 卡,但它也可以实现为设备中的内置存储,与受保护的内部存储不同,并且可以作为文件系统安装在计算机上。
硬件的名称(来自内核命令行或/proc)。
DeviceInfo . getHardware ( ) . then ( hardware => {
// "walleye"
} ) ;
主机名
DeviceInfo . getHost ( ) . then ( ( host ) => {
// "wprd10.hot.corp.google.com"
} ) ;
已弃用获取设备当前的 IP 地址。 (仅限wifi)切换到react-native-netinfo/netinfo或react-native-network-info
DeviceInfo . getIpAddress ( ) . then ( ( ip ) => {
// "92.168.32.44"
} ) ;
0.22.0 中添加了对 iOS 的支持
底层源代码管理用来表示此构建的内部值。
DeviceInfo . getIncremental ( ) . then ( ( incremental ) => {
// "4820017"
} ) ;
底层源代码管理用来表示此构建的内部值。
DeviceInfo . getInstallerPackageName ( ) . then ( ( installerPackageName ) => {
// Play Store: "com.android.vending"
// Amazon: "com.amazon.venezia"
// Samsung App Store: "com.sec.android.app.samsungapps"
// iOS: "AppStore", "TestFlight", "Other"
} ) ;
在应用程序安装时获取引荐来源网址字符串。
DeviceInfo . getInstallReferrer ( ) . then ( ( installReferrer ) => {
// If the app was installed from https://play.google.com/store/apps/details?id=com.myapp&referrer=my_install_referrer
// the result will be "my_install_referrer"
} ) ;
获取应用程序实例 ID。
这会尝试按以下顺序从这些源获取实例 ID:
react-native-device-info
中键instanceId
下的值firebaseBomVersion
或firebaseIidVersion
-已弃用)googlePlayServicesIidVersion
或googlePlayServicesVersion
在 gradle ext 中定义 -已弃用)如果您使用的是已弃用的源,则生成的实例 ID 存储在共享首选项中,因此在 React-native-device-info 的主要版本中它将保持稳定。
在react-native-device-info的未来版本中,Firebase IID和GMS IID实现将被删除,所有未来值将是存储在SharedPreferences中的值(如果有),或者是一个新的随机UUID,然后将被存储并用于将来安装该应用程序。
DeviceInfo . getInstanceId ( ) . then ( ( instanceId ) => {
// Android: da4e0245-5d6c-402a-a07c-0c5349f229e2
} ) ;
请参阅 https://developers.google.com/instance-id/