Информация об устройстве для React Native.
Ваш подфайл iOS необходимо будет перейти на iOS 10 минимум. v7 этого модуля больше не поддерживает iOS9.
Использование НПМ:
npm install --save react-native-device-info
или с помощью пряжи:
yarn add react-native-device-info
Если вы хотите использовать отслеживание Install Referrer, вам необходимо добавить эту конфигурацию в конфигурацию Proguard.
-keep class com.android.installreferrer.api.** {
*;
}
Если у вас возникли проблемы с hasGms() в ваших APK-файлах, добавьте следующее правило в вашу конфигурацию Proguard.
-keep class com.google.android.gms.common.** {*;}
По умолчанию для этого модуля используется AndroidX. Вам следует настроить версии библиотеки аналогично этой в блоке ext вашего файла android/build.gradle
.. .
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 в обратном режиме, документация доступна вместе с этим пакетом.
Связывание в собственных модулях является частым источником проблем для новых разработчиков, работающих с реагированием, что приводит к ошибкам типа «RNDeviceInfo имеет значение null» и т. д. По этой причине было реализовано автоматическое связывание, и его следует использовать в вашем проекте.
Автоматическое связывание поддерживается для всех платформ (даже для Windows на React Native >= 0,63!)
Предыдущие версии необходимо было связывать вручную. Для этих предыдущих версий, ориентированных на реагирование, поддержка не предоставляется, но вы можете обратиться к более старым версиям этого README, если хотите. Обновитесь до современных версий 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 | Андроид | Окна | Интернет | видениеOS |
---|---|---|---|---|---|---|
получитьAndroidId() | Promise | ✅ | ||||
getApiLevel() | Promise | ✅ | ||||
получитьИмяПриложения() | string | ✅ | ✅ | ✅ | ✅ | |
getAvailableLocationProviders() | Promise | ✅ | ✅ | ✅ | ||
getBaseOs() | Promise | ✅ | ✅ | ✅ | ||
getBuildId() | Promise | ✅ | ✅ | ✅ | ✅ | |
getBatteryLevel() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
получить загрузчик() | Promise | ✅ | ||||
getBrand() | string | ✅ | ✅ | ✅ | ✅ | |
getBuildNumber() | string | ✅ | ✅ | ✅ | ✅ | |
getBundleId() | string | ✅ | ✅ | ✅ | ✅ | |
isCameraPresent() | Promise | ✅ | ✅ | ✅ | ||
getCarrier() | Promise | ✅ | ✅ | |||
получитьКодовоеимя() | Promise | ✅ | ||||
getDevice() | Promise | ✅ | ||||
getDeviceId() | string | ✅ | ✅ | ✅ | ✅ | |
getDeviceType() | string | ✅ | ✅ | ✅ | ||
getDisplay() | Promise | ✅ | ||||
ПолучитьИмяУстройства() | Promise | ✅ | ✅ | ✅ | ✅ | |
getDeviceToken() | Promise | ✅ | ✅ | |||
getFirstInstallTime() | Promise | ✅ | ✅ | ✅ | ✅ | |
получить отпечаток пальца () | Promise | ✅ | ||||
getFontScale() | Promise | ✅ | ✅ | ✅ | ||
getFreeDiskStorage() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getFreeDiskStorageOld() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getHardware() | Promise | ✅ | ||||
getHost() | Promise | ✅ | ✅ | |||
getHostNames() | Promise | ✅ | ||||
получитьIpAddress() | Promise | ✅ | ✅ | ✅ | ✅ | |
getIncremental() | Promise | ✅ | ||||
getInstallerPackageName() | Promise | ✅ | ✅ | ✅ | ✅ | |
getInstallReferrer() | Promise | ✅ | ✅ | ✅ | ||
getInstanceId() | Promise | ✅ | ||||
getLastUpdateTime() | Promise | ✅ | ||||
получитьMacAddress() | Promise | ✅ | ✅ | ✅ | ||
getManufacturer() | Promise | ✅ | ✅ | ✅ | ✅ | |
getMaxMemory() | Promise | ✅ | ✅ | ✅ | ||
получитьМодель() | string | ✅ | ✅ | ✅ | ✅ | |
getPowerState() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
получитьПродукт() | Promise | ✅ | ||||
getPreviewSdkInt() | Promise | ✅ | ||||
getReadableVersion() | string | ✅ | ✅ | ✅ | ✅ | |
получитьсерийныйномер() | Promise | ✅ | ✅ | |||
получитьSecurityPatch() | Promise | ✅ | ||||
getStartupTime() | Promise | ✅ | ✅ | ✅ | ||
getSystemAvailableFeatures() | Promise | ✅ | ||||
получитьимясистемы() | string | ✅ | ✅ | ✅ | ✅ | |
getSystemVersion() | string | ✅ | ✅ | ✅ | ✅ | |
getTags() | Promise | ✅ | ||||
getType() | Promise | ✅ | ||||
getTotalDiskCapacity() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalDiskCapacityOld() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalMemory() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUniqueId() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUsedMemory() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getUserAgent() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUserAgentSync() | string | ✅ | ✅ | |||
getVersion() | string | ✅ | ✅ | ✅ | ✅ | |
получить яркость() | Promise | ✅ | ||||
имеетGms() | Promise | ✅ | ||||
имеетHms() | Promise | ✅ | ||||
имеетNotch() | boolean | ✅ | ✅ | ✅ | ✅ | |
имеетDynamicIsland() | boolean | ✅ | ✅ | ✅ | ✅ | |
имеетSystemFeature() | Promise | ✅ | ||||
isAirplaneMode() | Promise | ✅ | ✅ | |||
isBatteryCharging() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
isEmulator() | Promise | ✅ | ✅ | ✅ | ✅ | |
isKeyboardConnected() | Promise | ✅ | ||||
isLandscape() | Promise | ✅ | ✅ | ✅ | ✅ | |
isLocationEnabled() | Promise | ✅ | ✅ | ✅ | ✅ | |
isMouseConnected() | Promise | ✅ | ||||
isHeadphonesConnected() | Promise | ✅ | ✅ | ✅ | ||
isWiredHeadphonesConnected() | Promise | ✅ | ✅ | ✅ | ||
isBluetoothHeadphonesConnected() | Promise | ✅ | ✅ | ✅ | ||
isPinOrFingerprintSet() | Promise | ✅ | ✅ | ✅ | ✅ | |
isTablet() | boolean | ✅ | ✅ | ✅ | ✅ | |
isLowRamDevice() | boolean | ✅ | ||||
isDisplayZoomed() | boolean | ✅ | ||||
isTabletMode() | Promise | ✅ | ||||
поддерживается32BitAbis() | Promise | ✅ | ||||
поддерживается64BitAbis() | Promise | ✅ | ||||
поддерживаетсяAbis() | Promise | ✅ | ✅ | ✅ | ✅ | |
syncUniqueId() | Promise | ✅ | ✅ | |||
getSupportedMediaTypeList() | Promise | ✅ |
Получает уровень 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:
Возвращает -1 в симуляторе iOS.
Номер версии системного загрузчика.
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 все равно вернет истинное значение.
Получает имя оператора связи (оператора сети).
DeviceInfo . getCarrier ( ) . then ( ( carrier ) => {
// "SOFTBANK"
} ) ;
Текущее кодовое имя разработки или строка «REL», если это сборка выпуска.
DeviceInfo . getCodename ( ) . then ( ( codename ) => {
// "REL"
} ) ;
Название промышленного образца.
DeviceInfo . getDevice ( ) . then ( ( device ) => {
// "walleye"
} ) ;
Получает идентификатор устройства.
let deviceId = DeviceInfo . getDeviceId ( ) ;
// iOS: "iPhone7,2"
// Android: "goldfish"
// Windows: "Y3R94UC#AC4"
Строка идентификатора сборки, предназначенная для отображения пользователю.
DeviceInfo . getDisplay ( ) . then ( ( display ) => {
// "OPM2.171026.006.G1"
} ) ;
Получает имя устройства.
DeviceInfo . getDeviceName ( ) . then ( ( deviceName ) => {
// iOS: "Becca's iPhone 6"
// Android: ?
// Windows: ?
} ) ;
Раньше для этого требовался android.permission.BLUETOOTH, но новой реализации в версии 3 он не нужен. Вы можете удалить его из своего AndroidManifest.xml, если он у вас есть для этого API. 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"
} ) ;
Получает масштаб шрифта устройства. Масштаб шрифта — это отношение текущего системного шрифта к «нормальному» размеру шрифта, поэтому, если обычный текст имеет размер 10 пунктов, а системный шрифт в настоящее время составляет 15 пунктов, масштаб шрифта будет равен 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)
} ) ;
API, используемый этим методом для Android, был изменен в версии 6.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-адрес устройства. (только для Wi-Fi) Переключитесь на реакцию-native-netinfo/netinfo или реакцию-native-network-info
DeviceInfo . getIpAddress ( ) . then ( ( ip ) => {
// "92.168.32.44"
} ) ;
Поддержка iOS была добавлена в версии 0.22.0.
Внутреннее значение, используемое базовым элементом управления версиями для представления этой сборки.
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"
} ) ;
Получает идентификатор экземпляра приложения.
Это попытка получить идентификатор экземпляра из этих источников в следующем порядке:
instanceId
в файле react-native-device-info
firebaseBomVersion
или firebaseIidVersion
определены в gradle ext — устаревший )googlePlayServicesIidVersion
или googlePlayServicesVersion
определен в gradle ext - устарел )Если вы используете устаревшие источники, сгенерированный идентификатор экземпляра сохраняется в общих настройках, поэтому он будет стабильным во время этой основной версии реакции-native-device-info.
В будущей версии response-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/.
Получает время последнего обновления приложения в миллисекундах.
DeviceInfo . getLastUpdateTime ( ) . then ( ( lastUpdateTime ) => {
// Android: 1517681764992
} ) ;
Получает MAC-адрес сетевого адаптера.
DeviceInfo . getMacAddress ( ) . then ( ( mac ) => {
// "E5:12:D8:E5:69:97"
} ) ;
iOS: этот метод всегда возвращает «02:00:00:00:00:00», поскольку получение MAC-адреса отключено с iOS 7.
Получает производителя устройства.
DeviceInfo . getManufacturer ( ) . then ( ( manufacturer ) => {
// iOS: "Apple"
// Android: "Google"
// Windows: ?
} ) ;
Возвращает максимальный объем памяти, который виртуальная машина попытается использовать, в байтах.
DeviceInfo . getMaxMemory ( ) . then ( ( maxMemory ) => {
// 402653183
} ) ;
Получает модель устройства.
Предупреждение iOS: список с именами устройств поддерживается сообществом и может отставать от новых устройств. Рекомендуется использовать getDeviceId()
поскольку он более надежен и всегда актуален для новых устройств iOS. Мы принимаем запросы на включение, которые добавляют новые устройства iOS в список с именами устройств.
let model = DeviceInfo . getModel ( ) ;
// iOS: ?
// Android: ?
// Windows: ?
getPhoneNumber() был удален. Этот метод использует устаревшие API Android. Вы можете использовать React-native-sim-cards-manager, чтобы получить номер телефона.
Получает состояние питания устройства, включая уровень заряда батареи, подключено ли оно к сети и работает ли система в данный момент в режиме пониженного энергопотребления. Отображает предупреждение на iOS, если мониторинг заряда батареи не включен или при попытке использовать эмулятор (где мониторинг невозможен).
DeviceInfo . getPowerState ( ) . then ( ( state ) => {
// {
// batteryLevel: 0.759999,
// batteryState: 'unplugged',
// lowPowerMode: false,
// }
} ) ;
Название всего продукта.
DeviceInfo . getProduct ( ) . then ( ( product ) => {
// "walleye"
} ) ;
Предварительная версия для разработчиков предварительной версии SDK.
DeviceInfo . getPreviewSdkInt ( ) . then ( ( previewSdkInt ) => {
// 0
} ) ;
Получает удобочитаемую версию приложения (так же, как getVersion() + '.' + getBuildNumber()).
let readableVersion = DeviceInfo . getReadableVersion ( ) ;
// iOS: 1.0.1.32
// Android: 1.0.1.234
// Windows: ?
Получает серийный номер устройства. Почти во всех случаях будет «неизвестно», если только у вас нет привилегированного приложения и вы не знаете, что делаете.
DeviceInfo . getSerialNumber ( ) . then ( ( serialNumber ) => {
// iOS: unknown
// Android: ? (maybe a serial number, if your app is privileged)
// Windows: ? (a serial number, if your app has the "capability smbios")
} ) ;
Если вы хотите использовать этот метод в Windows, вам необходимо добавить возможность smbios в свое приложение. Пожалуйста, следуйте этой документации, чтобы добавить возможность в ваш файл манифеста.
Видимый пользователю уровень исправлений безопасности.
DeviceInfo . getSecurityPatch ( ) . then ( ( securityPatch ) => {
// "2018-07-05"
} ) ;
Получает имя ОС устройства.
let systemName = DeviceInfo . getSystemName ( ) ;
// iOS: "iOS" on newer iOS devices "iPhone OS" on older devices (including older iPad models), "iPadOS" for iPads using iPadOS 15.0 or higher.
// Android: "Android"
// Windows: ?
Получает время запуска текущего процесса приложения в миллисекундах.
DeviceInfo . getStartupTime ( ) . then ( ( startupTime ) => {
// Android: 1517681764528
// iOS: 1517681764528
} ) ;
Получает версию ОС устройства.
let systemVersion = DeviceInfo . getSystemVersion ( ) ;
// iOS: "11.0"
// Android: "7.1.1"
// Windows: ?
Получает номер сборки операционной системы.
DeviceInfo . getBuildId ( ) . then ( ( buildId ) => {
// iOS: "12A269"
// tvOS: not available
// Android: "13D15"
// Windows: not available
} ) ;
Теги, разделенные запятыми, описывающие сборку.
DeviceInfo . getTags ( ) . then ( ( tags ) => {
// "release-keys, unsigned, debug",
} ) ;
Тип сборки.
DeviceInfo . getType ( ) . then ( ( type ) => {
// "user", "eng"
} ) ;
Метод, позволяющий получить полный размер дискового пространства в байтах с учетом расчета как корневой файловой системы, так и файловой системы данных.
DeviceInfo . getTotalDiskCapacity ( ) . then ( ( capacity ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
API, используемый этим методом для Android, был изменен в версии 6.0.0. Старая версия сохранена ниже как getTotalDiskCapacityOld()
. В iOS getTotalDiskCapacity()
и getTotalDiskCapacityOld()
возвращают одно и то же значение.
Старая реализация метода, который получает полный размер дискового пространства в байтах.
DeviceInfo . getTotalDiskCapacityOld ( ) . then ( ( capacity ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
Получает общий объем памяти устройства в байтах.
DeviceInfo . getTotalMemory ( ) . then ( ( totalMemory ) => {
// 1995018240
} ) ;
Этот идентификатор считается конфиденциальной информацией в некоторых магазинах приложений (например, Huawei или Google Play) и может привести к удалению или отклонению вашего приложения, если оно используется без согласия пользователя или в несанкционированных целях. Дополнительную информацию см. в правилах магазина (см. примечания ниже).
Получает уникальный идентификатор устройства. На Android в настоящее время он идентичен getAndroidId()
в этом модуле. В iOS используется идентификатор uid DeviceUID
. В Windows он использует Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation.id
.
DeviceInfo . getUniqueId ( ) . then ( ( uniqueId ) => {
// iOS: "FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9"
// Android: "dd96dec43fb81c97"
// Windows: "{2cf7cb3c-da7a-d508-0d7f-696bb51185b4}"
} ) ;
- iOS: это
IDFV
или случайная строка, если IDFV недоступен. После создания UID он сохраняется в связке ключей iOS и NSUserDefaults. Таким образом, все останется прежним, даже если вы удалите приложение или сбросите IDFV. Вы можете осторожно считать его постоянным уникальным идентификатором. Его можно изменить только в том случае, если кто-то вручную переопределит значения в Keychain/NSUserDefaults или если Apple изменит реализации Keychain и NSUserDefaults. Внимание: IDFV рассчитывается с использованием идентификатора вашего пакета и поэтому будет отличаться в расширениях приложения.- Android: до версии Oreo этот идентификатор (ANDROID_ID) всегда будет одинаковым после настройки телефона.
- Android: политика Google Play, см. «постоянные идентификаторы устройств». Huawei – В рекомендациях по проверке AppGallery см. «постоянный идентификатор устройства» и «получение согласия пользователя».
Этот метод предназначен для iOS.
Это синхронизирует uniqueId с IDFV
или устанавливает новую случайную строку.
В iOS используется идентификатор uid DeviceUID
. На других платформах в этом модуле просто вызывается getUniqueId()
.
DeviceInfo . syncUniqueId ( ) . then ( ( uniqueId ) => {
// iOS: "FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9"
// Android: "dd96dec43fb81c97"
// Windows: ?
} ) ;
- Если пользователь переместил или восстановил данные с одного устройства iOS на второе устройство iOS, у него будет два разных устройства с одинаковым
uniqueId
в Keychain/NSUserDefaults. Пользователь может вызватьsyncUniqueId()
на новом устройстве iOS. Это обновит егоuniqueId
изIDFV
или случайной строки.
Получает использование памяти приложения в байтах.
Примечание. Этот метод предназначен только для отладки или создания пользовательского интерфейса управления процессами.
DeviceInfo . getUsedMemory ( ) . then ( ( usedMemory ) => {
// 23452345
} ) ;
Этот метод получает список поддерживаемых медиакодеков.
DeviceInfo . getSupportedMediaTypeList ( ) . then ( ( string [ ] ) => {
// ["audio/mpeg", "audio/mp4a-latm", "audio/mp4a-latm", "audio/mp4a-latm", "audio/mp4a-latm", "video/avc", "video/3gpp", "video/hevc", "video/mp4v-es", "video/av01", "video/avc", "video/avc", "video/avc", "video/avc"]
} ) ;
Получает пользовательский агент устройства.
DeviceInfo . getUserAgent ( ) . then ( ( userAgent ) => {
// iOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143"
// tvOS: not available
// Android: "Mozilla/5.0 (Linux; Android 12; sdk_gphone64_arm64 Build/SE1A.220630.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36"
// Windows: ?
} ) ;
Получает версию приложения. Учтите, что строка версии имеет формат устройства/ОС и может содержать любые дополнительные данные (например, номер сборки и т. д.). Если вы хотите быть уверены в формате версии, вы можете использовать регулярное выражение, чтобы получить нужную часть возвращаемой строки версии.
let version = DeviceInfo . getVersion ( ) ;
// iOS: "1.0"
// Android: "1.0" or "1.0.2-alpha.12"
// Windows: ?
Сообщает, находится ли устройство в режиме полета.
DeviceInfo . isAirplaneMode ( ) . then ( ( airplaneModeOn ) => {
// false
} ) ;
- Это работает только в том случае, если удаленный отладчик отключен.
Сообщает, заряжается ли аккумулятор в данный момент.
DeviceInfo . isBatteryCharging ( ) . then ( ( isCharging ) => {
// true or false
} ) ;
Сообщает, работает ли приложение в эмуляторе.
DeviceInfo . isEmulator ( ) . then ( ( isEmulator ) => {
// false
} ) ;
Сообщает, подключена ли к устройству клавиатура.
let isKeyboardConnected = DeviceInfo . isKeyboardConnected ( ) ;
// true
Сообщает, был ли установлен для устройства PIN-код или отпечаток пальца.
DeviceInfo . isPinOrFingerprintSet ( ) . then ( ( isPinOrFingerprintSet ) => {
if ( ! isPinOrFingerprintSet ) {
// ...
}
} ) ;
Сообщает, является ли устройство планшетом.
let isTablet = DeviceInfo . isTablet ( ) ;
// true
Сообщает, имеет ли устройство мало оперативной памяти.
let isLowRamDevice = DeviceInfo . isLowRamDevice ( ) ;
// true
Сообщает, изменил ли пользователь масштаб отображения на увеличенный.
let isDisplayZoomed = DeviceInfo . isDisplayZoomed ( ) ;
// true
Сообщает, находится ли устройство в режиме планшета.
let isTabletMode = DeviceInfo . isTabletMode ( ) ;
// true
Сообщает, находится ли устройство в ландшафтном режиме.
DeviceInfo . isLandscape ( ) . then ( ( isLandscape ) => {
// true
} ) ;
Сообщает, подключена ли к устройству мышь.
let isMouseConnected = DeviceInfo . isMouseConnected ( ) ;
// true
Сообщает, поддерживает ли устройство Google Mobile Services.
DeviceInfo . hasGms ( ) . then ( ( hasGms ) => {
// true
} ) ;
Сообщает, поддерживает ли устройство мобильные сервисы Huawei.
DeviceInfo . hasHms ( ) . then ( ( hasHms ) => {
// true
} ) ;
Сообщает, есть ли на устройстве вырез.
let hasNotch = DeviceInfo . hasNotch ( ) ;
// true
Сообщает, имеет ли устройство динамический остров.
let hasDynamicIsland = DeviceInfo . hasDynamicIsland ( ) ;
// true
Возвращает тип устройства в виде строки, которая может быть одной из:
Handset
Tablet
Tv
Desktop
GamingConsole
Headset
unknown
let type = DeviceInfo . getDeviceType ( ) ;
// 'Handset'
Упорядоченный список 32-битных ABI, поддерживаемых этим устройством.
DeviceInfo . supported32BitAbis ( ) . then ( ( abis ) => {
// ["armeabi-v7a", "armeabi"]
} ) ;
Упорядоченный список 64-битных ABI, поддерживаемых этим устройством.
DeviceInfo . supported64BitAbis ( ) . then ( ( abis ) => {
// ["arm64-v8a"]
} ) ;
Возвращает список поддерживаемых версий архитектуры процессора.
DeviceInfo . supportedAbis ( ) . then ( ( abis ) => {
// [ "arm64 v8", "Intel x86-64h Haswell", "arm64-v8a", "armeabi-v7a", "armeabi", "win_x86", "win_arm", "win_x64" ]
} ) ;
Сообщает, имеет ли устройство определенную системную функцию.
DeviceInfo . hasSystemFeature ( 'amazon.hardware.fire_tv' ) . then ( ( hasFeature ) => {
// true or false
} ) ;
Возвращает список доступных системных функций на Android.
DeviceInfo . getSystemAvailableFeatures ( ) . then ( ( features ) => {
// ["android.software.backup", "android.hardware.screen.landscape", "android.hardware.wifi", ...]
} ) ;
Сообщает, отключены ли на устройстве службы определения местоположения на уровне устройства (НЕ связано с разрешениями для конкретных приложений).
DeviceInfo . isLocationEnabled ( ) . then ( ( enabled ) => {
// true or false
} ) ;
Сообщает, подключено ли устройство к проводной гарнитуре или наушникам Bluetooth.
DeviceInfo . isHeadphonesConnected ( ) . then ( ( enabled ) => {
// true or false
} ) ;
Сообщает, подключено ли устройство к проводной гарнитуре
DeviceInfo . isWiredHeadphonesConnected ( ) . then ( ( enabled ) => {
// true or false
} ) ;
Сообщает, подключено ли устройство к Bluetooth-гарнитуре.
DeviceInfo . isBluetoothHeadphonesConnected ( ) . then ( ( enabled ) => {
// true or false
} ) ;
Возвращает объект поставщиков/служб определения местоположения для конкретной платформы с boolean
значением независимо от того, доступны ли они в данный момент.
ПРИМЕЧАНИЕ. Для этой функции требуется доступ к разрешению местоположения на Android.
DeviceInfo . getAvailableLocationProviders ( ) . then ( ( providers ) => {
// {
// gps: true
// network: true
// passive: true
// }
} ) ;
DeviceInfo . getAvailableLocationProviders ( ) . then ( ( providers ) => {
// {
// headingAvailable: false
// isRangingAvailable: false
// locationServicesEnabled: true
// significantLocationChangeMonitoringAvailable: true
// }
} ) ;
Получает текущий уровень яркости главного экрана устройства. Пока только iOS. Возвращает число от 0,0 до 1,0 включительно.
DeviceInfo . getBrightness ( ) . then ( ( brightness ) => {
// iOS: 0.6
} ) ;
Поддерживается в Windows, iOS и Android (веб-поддержка API, связанных с аккумулятором/зарядкой).
Срабатывает при изменении уровня заряда батареи; отправляются не чаще, чем раз в минуту.
import { useBatteryLevel } from 'react-native-device-info' ;
const batteryLevel = useBatteryLevel ( ) ; // 0.759999
< Text > { batteryLevel } < / Text > ;
import { NativeEventEmitter , NativeModules } from 'react-native' ;
const deviceInfoEmitter = new NativeEventEmitter ( NativeModules . RNDeviceInfo ) ;
deviceInfoEmitter . addListener ( 'RNDeviceInfo_batteryLevelDidChange' , ( level ) => {
// 0.759999
} ) ;
Срабатывает, когда уровень заряда батареи считается низким (несколько раз, пока не зарядится)
Платформа | Процент |
---|---|
iOS | 20 |
Андроид | 15 |
Интернет | 20 |
Окна | 20 |
import { useBatteryLevelIsLow } from 'react-native-device-info' ;
const batteryLevelIsLow = useBatteryLevelIsLow ( ) ; // 0.19
< Text > { batteryLevelIsLow } < / Text > ;
import { NativeEventEmitter , NativeModules } from 'react-native' ;
const deviceInfoEmitter = new NativeEventEmitter ( NativeModules . RNDeviceInfo ) ;
deviceInfoEmitter . addListener ( 'RNDeviceInfo_batteryLevelIsLow' , ( level ) => {
// 0.19
} ) ;
Срабатывает, когда состояние батареи изменяется или устройство переходит в режим энергосбережения, например, когда устройство переходит в режим зарядки или отключается от сети.
import { usePowerState } from 'react-native-device-info' ;
const powerState = usePowerState ( ) ;
// {
// batteryLevel: 0.759999,
// batteryState: 'unplugged',
// lowPowerMode: false,
// }
< Text > { powerState } < / Text > ;
import { NativeEventEmitter , NativeModules } from 'react-native'
const deviceInfoEmitter = new NativeEventEmitter ( NativeModules . RNDeviceInfo )
deviceInfoEmitter . addListener ( 'RNDeviceInfo_powerStateDidChange' , { powerState } = > {
// {
// batteryLevel: 0.759999,
// batteryState: 'unplugged',
// lowPowerMode: false,
// }
} ) ;
Получает время первой установки приложения в миллисекундах.
import { useFirstInstallTime } from 'react-native-device-info' ;
const { loading , result } = useFirstInstallTime ( ) ; // { loading: true, result: 1517681764528}
< Text > { loading ? 'loading...' : result } < / Text > ;
Получает имя устройства.
import { useDeviceName } from 'react-native-device-info' ;
const { loading , result } = useDeviceName ( ) ; // { loading: true, result: "Becca's iPhone 6"}
< Text > { loading ? 'loading...' : result } < / Text > ;
Сообщает, имеет ли устройство определенную системную функцию.
import { useHasSystemFeature } from 'react-native-device-info' ;
const { loading , result } = useHasSystemFeature ( 'amazon.hardware.fire_tv' ) ; // { loading: true, result: false }
< Text > { loading ? 'loading...' : result } < / Text > ;
Узнайте, работает ли приложение в эмуляторе.
import { useIsEmulator } from 'react-native-device-info' ;
const { loading , result } = useIsEmulator ( ) ; // { loading: true, result: false }
< Text > { loading ? 'loading...' : result } < / Text > ;
Получает производителя устройства.
import { useManufacturer } from 'react-native-device-info' ;
const { loading , result } = useManufacturer ( ) ; // { loading: true, result: "Apple"}
< Text > { loading ? 'loading...' : result } < / Text > ;
Сообщает, подключено ли устройство к проводной гарнитуре или наушникам Bluetooth.
Этот перехватчик подписывается на событие RNDeviceInfo_headphoneConnectionDidChange
и соответствующим образом обновляет поле result
.
import { useIsHeadphonesConnected } from 'react-native-device-info' ;
const { loading , result } = useIsHeadphonesConnected ( ) ; // { loading: true, result: false}
< Text > { loading ? 'loading...' : result } < / Text > ;
Сообщает, подключено ли устройство к проводной гарнитуре.
Этот перехватчик подписывается на событие RNDeviceInfo_headphoneWiredConnectionDidChange
и соответствующим образом обновляет поле result
.
import { useIsWiredHeadphonesConnected } from 'react-native-device-info' ;
const { loading , result } = useIsWiredHeadphonesConnected ( ) ; // { loading: true, result: false}
< Text > { loading ? 'loading...' : result } < / Text > ;
Сообщает, подключено ли устройство к наушникам Bluetooth.
Этот перехватчик подписывается на событие RNDeviceInfo_headphoneBluetoothConnectionDidChange
и соответствующим образом обновляет поле result
.
import { useIsBluetoothHeadphonesConnected } from 'react-native-device-info' ;
const { loading , result } = useIsBluetoothHeadphonesConnected ( ) ; // { loading: true, result: false}
< Text > { loading ? 'loading...' : result } < / Text > ;
Получает текущий уровень яркости главного экрана устройства. Пока только iOS. Возвращает число от 0,0 до 1,0 включительно.
Этот хук подписывается на событие RNDeviceInfo_brightnessDidChange
и соответствующим образом обновляет поле brightness
.
import { useBrightness } from 'react-native-device-info' ;
const brightness = useBrightness ( ) ; // 0.46578987897654567
< Text > { brightness } < / Text > ;
import { NativeEventEmitter , NativeModules } from 'react-native' ;
const deviceInfoEmitter = new NativeEventEmitter ( NativeModules . RNDeviceInfo ) ;
deviceInfoEmitter . addListener ( 'RNDeviceInfo_brightnessDidChange' , ( brightness ) => {
// 0.46578987897654567
} ) ;
=======
Если вам нужно проверить тип устройства с собственной стороны, вы можете использовать следующее:
import com . learnium . resolver . DeviceTypeResolver
...
deviceTypeResolver = new DeviceTypeResolver ( context );
...
//Check if the device is a Tablet:
if ( deviceTypeResolver . isTablet ){
...
} else {
...
}
При установке или использовании react-native-device-info
вы можете столкнуться со следующими проблемами:
react-native-device-info
использует com.google.android.gms:play-services-gcm
для предоставления getInstanceId(). Это может привести к конфликтам при создании приложения Android.
Если вы используете другую версию com.google.android.gms:play-services-gcm
в своем приложении, вы можете определить переменную gradle googlePlayServicesVersion
в файле build.gradle
чтобы сообщить react-native-device-info
какая версия это должно требоваться. См. приведенный здесь пример проекта.
Если вы используете другую библиотеку, которая конфликтует с com.google.android.gms:play-services-gcm
, и вы уверены, что знаете, что делаете, и избежите конфликтов версий, вы можете просто игнорировать эту зависимость в ваш файл градиента:
compile(project( ' :react-native-device-info ' )) {
exclude group : ' com.google.android.gms '
}
Кажется, это ошибка, вызванная react-native link
. Вы можете вручную удалить libRNDeviceInfo-tvOS.a
в Xcode -> [Your iOS build target] -> Build Phrases -> Link Binary with Libraries
.
Это журнал системного уровня, который можно отключить, выполнив: xcrun simctl spawn booted log config --mode "level:off" --subsystem com.apple.CoreTelephony
. Чтобы отменить команду, вы можете выполнить: xcrun simctl spawn booted log config --mode "level:info" --subsystem com.apple.CoreTelephony
target 'yourTargetName' do
# See http://facebook.github.io/react-native/docs/integration-with-existing-apps.html#configuring-cocoapods-dependencies
pod 'React' , :path => '../node_modules/react-native' , :subspecs => [
'Core' ,
'CxxBridge' , # Include this for RN >= 0.47
'DevSupport' , # Include this to enable In-App Devmenu if RN >= 0.43
'RCTText' ,
'RCTNetwork' ,
'RCTWebSocket' , # Needed for debugging
'RCTAnimation' , # Needed for FlatList and animations running on native UI thread
# Add any other subspecs you want to use in your project
]
# Explicitly include Yoga if you are using RN >= 0.42.0
pod 'yoga' , :path => '../node_modules/react-native/ReactCommon/yoga'
# Third party deps podspec link - you may have multiple pods here, just an example
pod 'RNDeviceInfo' , path : '../node_modules/react-native-device-info'
end
# if you see errors about React duplicate definitions, this fixes it. The same works for yoga.
post_install do | installer |
installer . pods_project . targets . each do | target |
if target . name == "React"
target . remove_from_project
end
end
end
react-native-device-info
содержит собственный код, и над ним необходимо издеваться. Однако поддержка Jest Snapshot может работать.
Если у вас не настроен файл установки Jest, вам следует добавить следующее в настройки Jest и создать файл jest.setup.js в корне проекта:
setupFiles: [ '/jest.setup.js' ] ;
Затем вам следует добавить следующее в свой установочный файл Jest, чтобы имитировать собственный модуль DeviceInfo:
import mockRNDeviceInfo from 'react-native-device-info/jest/react-native-device-info-mock' ;
jest . mock ( 'react-native-device-info' , ( ) => mockRNDeviceInfo ) ;
Ознакомьтесь с примером проекта для получения дополнительной информации.
Некоторые API (например, getBatteryState) выдают предупреждения в определенных условиях, например, в tvOS или эмуляторе iOS. Это не будет заметно в производстве, но даже в разработке это может раздражать. Иметь предупреждения полезно, потому что эти устройства не возвращают состояние, и это может быть неожиданно, что приводит к проблемам с поддержкой GitHub. Предупреждения предназначены для обучения вас как разработчика. Если предупреждения вызывают затруднения, вы можете попробовать это в своем коде, чтобы подавить их:
import { LogBox } from 'react-native' ;
LogBox . ignoreLogs ( [ 'Battery state' ] ) ;
См. CHANGELOG.md.
Пожалуйста, ознакомьтесь contributing guide
.
Из уважения к разработчикам, в версии 0.21.6 эта библиотека стала совместимой с React-native-dom и React-native-web, предоставив пустой полифилл, чтобы избежать поломки сборок.
Только getUserAgent() вернет правильное значение. Все остальные методы API будут возвращать «пустое» значение документированного типа возврата: 0
для чисел, ''
для строк, false
для логических значений.