Informações do dispositivo para React Native.
Seu Podfile do iOS precisará migrar para, no mínimo, o iOS 10. v7 deste módulo não suporta mais iOS9.
Usando npm:
npm install --save react-native-device-info
ou usando fio:
yarn add react-native-device-info
Se quiser usar o rastreamento do Install Referrer, você precisará adicionar esta configuração à configuração do Proguard
-keep class com.android.installreferrer.api.** {
*;
}
Se você estiver tendo problemas com hasGms() em seus apks de lançamento, adicione a seguinte regra à configuração do Proguard
-keep class com.google.android.gms.common.** {*;}
O padrão deste módulo é AndroidX. Você deve configurar versões de sua biblioteca semelhantes a esta no bloco "ext" do seu arquivo 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
}
.. .
Se você não precisar do AndroidX, precisará usar o pacote jetifier no modo reverso, documentação disponível com esse pacote.
A vinculação em módulos nativos é uma fonte frequente de problemas para novos desenvolvedores react-nativos, resultando em erros como "RNDeviceInfo is null" etc. Por esse motivo a vinculação automática foi implementada e deve ser usada em seu projeto.
A vinculação automática é suportada para todas as plataformas (até mesmo janelas no React Native >= 0,63!)
As versões anteriores precisam fazer vinculação manual. Nenhum suporte é oferecido para essas versões nativas de reação anteriores, mas você pode consultar versões mais antigas deste README, se desejar. Atualize para versões modernas do react-native. Use a ferramenta upgrade-helper
na Internet, se necessário.
import DeviceInfo from 'react-native-device-info' ;
// or ES6+ destructured imports
import { getUniqueId , getManufacturer } from 'react-native-device-info' ;
Observe que muitas APIs são específicas da plataforma. Se não houver implementação para uma plataforma, os valores de retorno "padrão" que você receberá serão "unknown"
para string, -1
para número e false
para booleano. Matrizes e objetos estarão vazios ( []
e {}
respectivamente).
A maioria das APIs retorna uma promessa, mas também possui uma API correspondente com Sync
no final que opera de forma síncrona. Por exemplo, você pode preferir chamar isCameraPresentSync()
durante a inicialização do aplicativo para evitar chamadas assíncronas durante as primeiras partes da inicialização do aplicativo.
Nota sobre getUserAgentSync
Embora o método assíncrono getUserAgent
esteja disponível em ambas as plataformas, getUserAgentSync
só é compatível com Android.
O aplicativo de exemplo neste repositório mostra um exemplo de uso de cada API, consulte o aplicativo de exemplo se tiver dúvidas e, se achar que viu um problema, certifique-se de reproduzi-lo usando o aplicativo de exemplo antes de relatá-lo, obrigado.
Método | Tipo de retorno | iOS | Android | Windows | Rede | visão OS |
---|---|---|---|---|---|---|
obterAndroidId() | Promise | ✅ | ||||
getApiLevel() | Promise | ✅ | ||||
getApplicationName() | string | ✅ | ✅ | ✅ | ✅ | |
getAvailableLocationProviders() | Promise | ✅ | ✅ | ✅ | ||
getBaseOs() | Promise | ✅ | ✅ | ✅ | ||
getBuildId() | Promise | ✅ | ✅ | ✅ | ✅ | |
getBatteryLevel() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getBootloader() | Promise | ✅ | ||||
getMarca() | string | ✅ | ✅ | ✅ | ✅ | |
getBuildNumber() | string | ✅ | ✅ | ✅ | ✅ | |
getBundleId() | string | ✅ | ✅ | ✅ | ✅ | |
isCameraPresent() | Promise | ✅ | ✅ | ✅ | ||
getCarrier() | Promise | ✅ | ✅ | |||
getCodename() | Promise | ✅ | ||||
getDispositivo() | Promise | ✅ | ||||
getDeviceId() | string | ✅ | ✅ | ✅ | ✅ | |
getDeviceType() | string | ✅ | ✅ | ✅ | ||
getDisplay() | Promise | ✅ | ||||
getDeviceName() | Promise | ✅ | ✅ | ✅ | ✅ | |
getDeviceToken() | Promise | ✅ | ✅ | |||
getFirstInstallTime() | Promise | ✅ | ✅ | ✅ | ✅ | |
obter impressão digital() | Promise | ✅ | ||||
getFontScale() | Promise | ✅ | ✅ | ✅ | ||
getFreeDiskStorage() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getFreeDiskStorageOld() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getHardware() | Promise | ✅ | ||||
getHost() | Promise | ✅ | ✅ | |||
getHostNames() | Promise | ✅ | ||||
getIpAddress() | Promise | ✅ | ✅ | ✅ | ✅ | |
getIncremental() | Promise | ✅ | ||||
getInstallerPackageName() | Promise | ✅ | ✅ | ✅ | ✅ | |
getInstallReferrer() | Promise | ✅ | ✅ | ✅ | ||
getInstanceId() | Promise | ✅ | ||||
getLastUpdateTime() | Promise | ✅ | ||||
getMacAddress() | Promise | ✅ | ✅ | ✅ | ||
getFabricante() | Promise | ✅ | ✅ | ✅ | ✅ | |
getMaxMemory() | Promise | ✅ | ✅ | ✅ | ||
getModel() | string | ✅ | ✅ | ✅ | ✅ | |
getPowerState() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getProduto() | Promise | ✅ | ||||
getPreviewSdkInt() | Promise | ✅ | ||||
getReadableVersion() | string | ✅ | ✅ | ✅ | ✅ | |
getSerialNumber() | Promise | ✅ | ✅ | |||
getSecurityPatch() | Promise | ✅ | ||||
getStartupTime() | Promise | ✅ | ✅ | ✅ | ||
getSystemAvailableFeatures() | Promise | ✅ | ||||
getNomeSistema() | string | ✅ | ✅ | ✅ | ✅ | |
getSystemVersion() | string | ✅ | ✅ | ✅ | ✅ | |
getTags() | Promise | ✅ | ||||
getType() | Promise | ✅ | ||||
getTotalDiskCapacity() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalDiskCapacityOld() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalMemory() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUniqueId() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUsedMemory() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getUserAgent() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUserAgentSync() | string | ✅ | ✅ | |||
getVersão() | string | ✅ | ✅ | ✅ | ✅ | |
getBrilho() | Promise | ✅ | ||||
temGms() | Promise | ✅ | ||||
temHms() | Promise | ✅ | ||||
temNotch() | boolean | ✅ | ✅ | ✅ | ✅ | |
hasDynamicIsland() | boolean | ✅ | ✅ | ✅ | ✅ | |
hasSystemFeature() | Promise | ✅ | ||||
isAirplaneMode() | Promise | ✅ | ✅ | |||
estáCarregandoBateria() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
isEmulador() | Promise | ✅ | ✅ | ✅ | ✅ | |
isKeyboardConnected() | Promise | ✅ | ||||
éPaisagem() | Promise | ✅ | ✅ | ✅ | ✅ | |
isLocationEnabled() | Promise | ✅ | ✅ | ✅ | ✅ | |
isMouseConnected() | Promise | ✅ | ||||
isHeadphonesConnected() | Promise | ✅ | ✅ | ✅ | ||
isWiredHeadphonesConnected() | Promise | ✅ | ✅ | ✅ | ||
isBluetoothHeadphonesConnected() | Promise | ✅ | ✅ | ✅ | ||
isPinOrFingerprintSet() | Promise | ✅ | ✅ | ✅ | ✅ | |
isTablet() | boolean | ✅ | ✅ | ✅ | ✅ | |
isLowRamDevice() | boolean | ✅ | ||||
isDisplayZoomed() | boolean | ✅ | ||||
isTabletMode() | Promise | ✅ | ||||
suportado32BitAbis() | Promise | ✅ | ||||
suportado64BitAbis() | Promise | ✅ | ||||
suportadoAbis() | Promise | ✅ | ✅ | ✅ | ✅ | |
sincronizarUniqueId() | Promise | ✅ | ✅ | |||
getSupportedMediaTypeList() | Promise | ✅ |
Obtém o nível da API.
DeviceInfo . getApiLevel ( ) . then ( ( apiLevel ) => {
// iOS: ?
// Android: 25
// Windows: ?
} ) ;
Veja os níveis de API
Obtém o ANDROID_ID. Consulte a documentação da API para uso apropriado.
DeviceInfo . getAndroidId ( ) . then ( ( androidId ) => {
// androidId here
} ) ;
Obtém o nome do aplicativo.
let appName = DeviceInfo . getApplicationName ( ) ;
// AwesomeApp
O sistema operacional base no qual o produto se baseia.
DeviceInfo . getBaseOs ( ) . then ( ( baseOs ) => {
// "Windows", "Android" etc
} ) ;
Obtém o nível da bateria do dispositivo como um valor flutuante entre 0 e 1.
DeviceInfo . getBatteryLevel ( ) . then ( ( batteryLevel ) => {
// 0.759999
} ) ;
Para poder obter o nível real da bateria, ative o modo de monitoramento da bateria para a aplicação. Adicione este código:
[UIDevice currentDevice ].batteryMonitoringEnabled = true ;
para o aplicativo AppDelegate.m:didFinishLaunchingWithOptions:
Retorna -1 no Simulador iOS
O número da versão do carregador de inicialização do sistema.
DeviceInfo . getBootloader ( ) . then ( ( bootloader ) => {
// "mw8998-002.0069.00"
} ) ;
Obtém a marca do dispositivo.
let brand = DeviceInfo . getBrand ( ) ;
// iOS: "Apple"
// Android: "xiaomi"
// Windows: ?
Obtém o número de compilação do aplicativo.
let buildNumber = DeviceInfo . getBuildNumber ( ) ;
// iOS: "89"
// Android: "4"
// Windows: ?
Obtém o identificador do pacote configurável do aplicativo.
let bundleId = DeviceInfo . getBundleId ( ) ;
// "com.example.AwesomeApp"
Informa se o dispositivo possui alguma câmera agora.
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
} ) ;
- A adição/remoção a quente da câmera é suportada.
- Retorna o status da presença física da câmera. Se a câmera estiver presente, mas seu aplicativo não tiver permissão para usá-la, isCameraPresent ainda retornará o verdadeiro
Obtém o nome da operadora (operadora de rede).
DeviceInfo . getCarrier ( ) . then ( ( carrier ) => {
// "SOFTBANK"
} ) ;
O codinome de desenvolvimento atual ou a string "REL" se esta for uma compilação de lançamento.
DeviceInfo . getCodename ( ) . then ( ( codename ) => {
// "REL"
} ) ;
O nome do desenho industrial.
DeviceInfo . getDevice ( ) . then ( ( device ) => {
// "walleye"
} ) ;
Obtém o ID do dispositivo.
let deviceId = DeviceInfo . getDeviceId ( ) ;
// iOS: "iPhone7,2"
// Android: "goldfish"
// Windows: "Y3R94UC#AC4"
Uma string de ID de build destinada a ser exibida ao usuário.
DeviceInfo . getDisplay ( ) . then ( ( display ) => {
// "OPM2.171026.006.G1"
} ) ;
Obtém o nome do dispositivo.
DeviceInfo . getDeviceName ( ) . then ( ( deviceName ) => {
// iOS: "Becca's iPhone 6"
// Android: ?
// Windows: ?
} ) ;
Isso costumava exigir android.permission.BLUETOOTH, mas a nova implementação na v3 não precisa dele. Você pode removê-lo do seu AndroidManifest.xml se o tiver para esta API. iOS 16 e superior exigem direitos para acessar o nome do dispositivo definido pelo usuário, caso contrário, um valor genérico será retornado (ou seja, 'iPad', 'iPhone')
Obtém o token do dispositivo (consulte DeviceCheck). Disponível apenas para iOS 11.0+ em dispositivos reais. Isso rejeitará a promessa quando getDeviceToken não for compatível. Tenha cuidado com o tratamento de exceções.
DeviceInfo . getDeviceToken ( ) . then ( ( deviceToken ) => {
// iOS: "a2Jqsd0kanz..."
} ) ;
Obtém a hora em que o aplicativo foi instalado pela primeira vez, em milissegundos.
DeviceInfo . getFirstInstallTime ( ) . then ( ( firstInstallTime ) => {
// Android: 1517681764528
} ) ;
Uma string que identifica exclusivamente esta compilação.
DeviceInfo . getFingerprint ( ) . then ( ( fingerprint ) => {
// "google/walleye/walleye:8.1.0/OPM2.171026.006.G1/4820017:user/release-keys"
} ) ;
Obtém a escala da fonte do dispositivo. A escala da fonte é a proporção entre a fonte atual do sistema e o tamanho da fonte "normal", portanto, se o texto normal for 10pt e a fonte do sistema for atualmente 15pt, a escala da fonte seria 1,5. Isso pode ser usado para determinar se as configurações de acessibilidade foram alterado para o dispositivo; você pode querer reorganizar certas visualizações se a escala da fonte for significativamente maior (> 2,0)
DeviceInfo . getFontScale ( ) . then ( ( fontScale ) => {
// 1.2
} ) ;
Método que obtém o tamanho de armazenamento disponível, em bytes, levando em consideração o cálculo dos sistemas de arquivos raiz e de dados.
No iOS , este método aceita os seguintes argumentos opcionais:
'total'
: usa volumeAvailableCapacityKey
'important'
: usa volumeAvailableCapacityForImportantUsageKey
'opportunistic'
: usa volumeAvailableCapacityForOpportunisticUsageKey
Para obter mais detalhes, consulte a documentação da Apple sobre verificação da capacidade de armazenamento de volume.
DeviceInfo . getFreeDiskStorage ( ) . then ( ( freeDiskStorage ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
DeviceInfo . getFreeDiskStorage ( 'important' ) . then ( ( freeDiskStorage ) => {
// iOS: 18198219342 (important storage)
} ) ;
A API usada por este método para Android foi alterada na v6.0.0. A versão mais antiga foi mantida abaixo como getFreeDiskStorageOld()
. No iOS, getFreeDiskStorage()
e getFreeDiskStorageOld()
retornam o mesmo valor.
Implementação antiga do método que obtém o tamanho de armazenamento disponível, em bytes.
DeviceInfo . getFreeDiskStorageOld ( ) . then ( ( freeDiskStorage ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
De desenvolvedor.android.com:
Este método foi descontinuado no nível 29 da API.
Retorne o diretório de armazenamento primário compartilhado/externo.
Nota: não se confunda com a palavra “externo” aqui. Este diretório pode ser melhor pensado como mídia/armazenamento compartilhado. É um sistema de arquivos que pode conter uma quantidade relativamente grande de dados e que é compartilhado entre todos os aplicativos (não impõe permissões). Tradicionalmente, este é um cartão SD, mas também pode ser implementado como armazenamento integrado em um dispositivo distinto do armazenamento interno protegido e pode ser montado como um sistema de arquivos em um computador.
O nome do hardware (da linha de comando do kernel ou /proc).
DeviceInfo . getHardware ( ) . then ( hardware => {
// "walleye"
} ) ;
Nome do host
DeviceInfo . getHost ( ) . then ( ( host ) => {
// "wprd10.hot.corp.google.com"
} ) ;
Obsoleto Obtém o endereço IP atual do dispositivo. (apenas de wifi) Mude para react-native-netinfo/netinfo ou react-native-network-info
DeviceInfo . getIpAddress ( ) . then ( ( ip ) => {
// "92.168.32.44"
} ) ;
Suporte para iOS foi adicionado em 0.22.0
O valor interno usado pelo controle de origem subjacente para representar esse build.
DeviceInfo . getIncremental ( ) . then ( ( incremental ) => {
// "4820017"
} ) ;
O valor interno usado pelo controle de origem subjacente para representar esse build.
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"
} ) ;
Obtém a string de referência na instalação do aplicativo.
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"
} ) ;
Obtém o ID da instância do aplicativo.
Isso tenta obter um ID de instância destas fontes, nesta ordem:
instanceId
no arquivo SharedPreferences react-native-device-info
firebaseBomVersion
ou firebaseIidVersion
estiver definido em gradle ext - obsoleto )googlePlayServicesIidVersion
ou googlePlayServicesVersion
estiver definido em gradle ext - obsoleto )Se você estiver usando fontes obsoletas, o ID da instância gerado será armazenado nas preferências compartilhadas para que fique estável durante esta versão principal do react-native-device-info.
Em uma versão futura do react-native-device-info, as implementações Firebase IID e GMS IID serão removidas, e todos os valores futuros serão o valor (se houver) armazenado em SharedPreferences ou um novo UUID aleatório que será então armazenado e usado para a instalação desse aplicativo no futuro.
DeviceInfo . getInstanceId ( ) . then ( ( instanceId ) => {
// Android: da4e0245-5d6c-402a-a07c-0c5349f229e2
} ) ;
Consulte https://developers.google.com/instance-id/
Obtém a hora em que o aplicativo foi atualizado pela última vez, em milissegundos.
DeviceInfo . getLastUpdateTime ( ) . then ( ( lastUpdateTime ) => {
// Android: 1517681764992
} ) ;
Obtém o endereço MAC do adaptador de rede.
DeviceInfo . getMacAddress ( ) . then ( ( mac ) => {
// "E5:12:D8:E5:69:97"
} ) ;
iOS: Este método sempre retorna "02:00:00:00:00:00", pois a recuperação do endereço MAC está desabilitada desde o iOS 7
Obtém o fabricante do dispositivo.
DeviceInfo . getManufacturer ( ) . then ( ( manufacturer ) => {
// iOS: "Apple"
// Android: "Google"
// Windows: ?
} ) ;
Retorna a quantidade máxima de memória que a VM tentará usar, em bytes.
DeviceInfo . getMaxMemory ( ) . then ( ( maxMemory ) => {
// 402653183
} ) ;
Obtém o modelo do dispositivo.
Aviso do iOS: a lista com nomes de dispositivos é mantida pela comunidade e pode atrasar novos dispositivos. Recomenda-se usar getDeviceId()
pois é mais confiável e está sempre atualizado com novos dispositivos iOS. Aceitamos solicitações pull que adicionam novos dispositivos iOS à lista com nomes de dispositivos.
let model = DeviceInfo . getModel ( ) ;
// iOS: ?
// Android: ?
// Windows: ?
O getPhoneNumber() foi removido. Este método usa APIs Android obsoletas. Você pode usar react-native-sim-cards-manager para obter o número de telefone.
Obtém o estado de energia do dispositivo, incluindo o nível da bateria, se ele está conectado e se o sistema está operando no modo de baixo consumo de energia. Exibe um aviso no iOS se o monitoramento da bateria não estiver ativado ou se for tentado em um emulador (onde o monitoramento não é possível)
DeviceInfo . getPowerState ( ) . then ( ( state ) => {
// {
// batteryLevel: 0.759999,
// batteryState: 'unplugged',
// lowPowerMode: false,
// }
} ) ;
O nome do produto geral.
DeviceInfo . getProduct ( ) . then ( ( product ) => {
// "walleye"
} ) ;
A revisão de visualização do desenvolvedor de um SDK de pré-lançamento.
DeviceInfo . getPreviewSdkInt ( ) . then ( ( previewSdkInt ) => {
// 0
} ) ;
Obtém a versão legível do aplicativo (igual a getVersion() + '.' + getBuildNumber())
let readableVersion = DeviceInfo . getReadableVersion ( ) ;
// iOS: 1.0.1.32
// Android: 1.0.1.234
// Windows: ?
Obtém o número de série do dispositivo. Será ‘desconhecido’ em quase todos os casos, a menos que você tenha um aplicativo privilegiado e saiba o que está fazendo.
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")
} ) ;
Se quiser usar este método no Windows, você deve adicionar o recurso smbios em seu aplicativo. Siga esta documentação para adicionar o recurso em seu arquivo de manifesto.
O nível de patch de segurança visível ao usuário.
DeviceInfo . getSecurityPatch ( ) . then ( ( securityPatch ) => {
// "2018-07-05"
} ) ;
Obtém o nome do sistema operacional do dispositivo.
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: ?
Obtém a hora em que o processo atual do aplicativo foi iniciado, em milissegundos.
DeviceInfo . getStartupTime ( ) . then ( ( startupTime ) => {
// Android: 1517681764528
// iOS: 1517681764528
} ) ;
Obtém a versão do sistema operacional do dispositivo.
let systemVersion = DeviceInfo . getSystemVersion ( ) ;
// iOS: "11.0"
// Android: "7.1.1"
// Windows: ?
Obtém o número da compilação do sistema operacional.
DeviceInfo . getBuildId ( ) . then ( ( buildId ) => {
// iOS: "12A269"
// tvOS: not available
// Android: "13D15"
// Windows: not available
} ) ;
Tags separadas por vírgula que descrevem a compilação.
DeviceInfo . getTags ( ) . then ( ( tags ) => {
// "release-keys, unsigned, debug",
} ) ;
O tipo de construção.
DeviceInfo . getType ( ) . then ( ( type ) => {
// "user", "eng"
} ) ;
Método que obtém o tamanho total do armazenamento em disco, em bytes, levando em consideração o cálculo dos sistemas de arquivos raiz e de dados.
DeviceInfo . getTotalDiskCapacity ( ) . then ( ( capacity ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
A API usada por este método para Android foi alterada na v6.0.0. A versão mais antiga foi mantida abaixo como getTotalDiskCapacityOld()
. No iOS, getTotalDiskCapacity()
e getTotalDiskCapacityOld()
retornam o mesmo valor.
Implementação antiga do método que obtém o tamanho total do armazenamento em disco, em bytes.
DeviceInfo . getTotalDiskCapacityOld ( ) . then ( ( capacity ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
Obtém a memória total do dispositivo, em bytes.
DeviceInfo . getTotalMemory ( ) . then ( ( totalMemory ) => {
// 1995018240
} ) ;
Este identificador é considerado informação sensível em algumas lojas de aplicativos (por exemplo, Huawei ou Google Play) e pode levar à remoção ou rejeição do seu aplicativo, se usado sem o consentimento do usuário ou para fins não aprovados. Consulte as políticas da loja para obter mais informações (veja as notas abaixo).
Obtém o ID exclusivo do dispositivo. No Android, atualmente é idêntico a getAndroidId()
neste módulo. No iOS, ele usa o identificador uid DeviceUID
. No Windows ele usa Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation.id
.
DeviceInfo . getUniqueId ( ) . then ( ( uniqueId ) => {
// iOS: "FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9"
// Android: "dd96dec43fb81c97"
// Windows: "{2cf7cb3c-da7a-d508-0d7f-696bb51185b4}"
} ) ;
- iOS: Este é
IDFV
ou uma string aleatória se IDFV não estiver disponível. Depois que o UID é gerado, ele é armazenado no iOS Keychain e no NSUserDefaults. Portanto, permaneceria o mesmo mesmo se você excluísse o aplicativo ou redefinisse o IDFV. Você pode considerá-lo cuidadosamente um ID exclusivo persistente. Ele pode ser alterado apenas no caso de alguém substituir manualmente os valores em Keychain/NSUserDefaults ou se a Apple alterar as implementações de Keychain e NSUserDefaults. Cuidado: o IDFV é calculado usando seu identificador de pacote e, portanto, será diferente nas extensões de aplicativo.- Android: Antes do Oreo, esse ID (ANDROID_ID) sempre será o mesmo depois que você configurar seu telefone.
- android: política do Google Play, consulte "identificadores de dispositivos persistentes". Huawei - As diretrizes de revisão da AppGallery consulte "identificador permanente do dispositivo" e "obtenção de consentimento do usuário".
Este método é destinado ao iOS.
Isso sincroniza uniqueId com IDFV
ou define uma nova string aleatória.
No iOS, ele usa o identificador uid DeviceUID
. Em outras plataformas basta chamar getUniqueId()
neste módulo.
DeviceInfo . syncUniqueId ( ) . then ( ( uniqueId ) => {
// iOS: "FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9"
// Android: "dd96dec43fb81c97"
// Windows: ?
} ) ;
- Se o usuário moveu ou restaurou dados de um dispositivo iOS para um segundo dispositivo iOS, ele terá dois dispositivos diferentes com o mesmo
uniqueId
em Keychain/NSUserDefaults. O usuário pode chamarsyncUniqueId()
no novo dispositivo iOS. Isso atualizará seuuniqueId
doIDFV
ou de uma string aleatória.
Obtém o uso de memória do aplicativo, em bytes.
Nota: este método destina-se apenas à depuração ou construção de uma IU de gerenciamento de processos voltada para o usuário.
DeviceInfo . getUsedMemory ( ) . then ( ( usedMemory ) => {
// 23452345
} ) ;
Este método obtém a lista de codecs de mídia suportados.
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"]
} ) ;
Obtém o agente do usuário do dispositivo.
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: ?
} ) ;
Obtém a versão do aplicativo. Leve em consideração que uma string de versão é formatada por dispositivo/SO e pode conter quaisquer dados adicionais (como número de compilação, etc.). Se quiser ter certeza sobre o formato da versão, você pode usar uma expressão regular para obter a parte desejada da string da versão retornada.
let version = DeviceInfo . getVersion ( ) ;
// iOS: "1.0"
// Android: "1.0" or "1.0.2-alpha.12"
// Windows: ?
Informa se o dispositivo está no modo avião.
DeviceInfo . isAirplaneMode ( ) . then ( ( airplaneModeOn ) => {
// false
} ) ;
- Isso só funciona se o depurador remoto estiver desabilitado.
Informa se a bateria está carregando.
DeviceInfo . isBatteryCharging ( ) . then ( ( isCharging ) => {
// true or false
} ) ;
Informa se a aplicação está rodando em um emulador.
DeviceInfo . isEmulator ( ) . then ( ( isEmulator ) => {
// false
} ) ;
Informa se o dispositivo possui um teclado conectado.
let isKeyboardConnected = DeviceInfo . isKeyboardConnected ( ) ;
// true
Informa se um número PIN ou uma impressão digital foi definido para o dispositivo.
DeviceInfo . isPinOrFingerprintSet ( ) . then ( ( isPinOrFingerprintSet ) => {
if ( ! isPinOrFingerprintSet ) {
// ...
}
} ) ;
Informa se o dispositivo é um tablet.
let isTablet = DeviceInfo . isTablet ( ) ;
// true
Informa se o dispositivo tem pouca RAM.
let isLowRamDevice = DeviceInfo . isLowRamDevice ( ) ;
// true
Informa se o usuário alterou Display Zoom para Zoomed
let isDisplayZoomed = DeviceInfo . isDisplayZoomed ( ) ;
// true
Informa se o dispositivo está no modo tablet.
let isTabletMode = DeviceInfo . isTabletMode ( ) ;
// true
Informa se o dispositivo está atualmente no modo paisagem.
DeviceInfo . isLandscape ( ) . then ( ( isLandscape ) => {
// true
} ) ;
Informa se o dispositivo possui um mouse conectado.
let isMouseConnected = DeviceInfo . isMouseConnected ( ) ;
// true
Informa se o dispositivo oferece suporte ao Google Mobile Services.
DeviceInfo . hasGms ( ) . then ( ( hasGms ) => {
// true
} ) ;
Informa se o dispositivo suporta Huawei Mobile Services.
DeviceInfo . hasHms ( ) . then ( ( hasHms ) => {
// true
} ) ;
Informa se o dispositivo possui notch.
let hasNotch = DeviceInfo . hasNotch ( ) ;
// true
Informa se o dispositivo possui ilha dinâmica.
let hasDynamicIsland = DeviceInfo . hasDynamicIsland ( ) ;
// true
Retorna o tipo do dispositivo como uma string, que será um dos seguintes:
Handset
Tablet
Tv
Desktop
GamingConsole
Headset
unknown
let type = DeviceInfo . getDeviceType ( ) ;
// 'Handset'
Uma lista ordenada de ABIs de 32 bits suportadas por este dispositivo.
DeviceInfo . supported32BitAbis ( ) . then ( ( abis ) => {
// ["armeabi-v7a", "armeabi"]
} ) ;
Uma lista ordenada de ABIs de 64 bits suportadas por este dispositivo.
DeviceInfo . supported64BitAbis ( ) . then ( ( abis ) => {
// ["arm64-v8a"]
} ) ;
Retorna uma lista de versões de arquitetura de processador suportadas
DeviceInfo . supportedAbis ( ) . then ( ( abis ) => {
// [ "arm64 v8", "Intel x86-64h Haswell", "arm64-v8a", "armeabi-v7a", "armeabi", "win_x86", "win_arm", "win_x64" ]
} ) ;
Informa se o dispositivo possui um recurso específico do sistema.
DeviceInfo . hasSystemFeature ( 'amazon.hardware.fire_tv' ) . then ( ( hasFeature ) => {
// true or false
} ) ;
Retorna uma lista de recursos de sistema disponíveis no Android.
DeviceInfo . getSystemAvailableFeatures ( ) . then ( ( features ) => {
// ["android.software.backup", "android.hardware.screen.landscape", "android.hardware.wifi", ...]
} ) ;
Informa se o dispositivo tem serviços de localização desativados no nível do dispositivo (NÃO relacionado a permissões específicas do aplicativo)
DeviceInfo . isLocationEnabled ( ) . then ( ( enabled ) => {
// true or false
} ) ;
Informa se o dispositivo está conectado a um fone de ouvido com fio ou fones de ouvido bluetooth
DeviceInfo . isHeadphonesConnected ( ) . then ( ( enabled ) => {
// true or false
} ) ;
Informa se o dispositivo está conectado a um fone de ouvido com fio
DeviceInfo . isWiredHeadphonesConnected ( ) . then ( ( enabled ) => {
// true or false
} ) ;
Informa se o dispositivo está conectado ao fone de ouvido bluetooth
DeviceInfo . isBluetoothHeadphonesConnected ( ) . then ( ( enabled ) => {
// true or false
} ) ;
Retorna um objeto de provedores/serviços de localização específicos da plataforma , com valor boolean
estejam ou não disponíveis no momento.
NOTA: Esta função requer acesso à permissão de localização no Android
DeviceInfo . getAvailableLocationProviders ( ) . then ( ( providers ) => {
// {
// gps: true
// network: true
// passive: true
// }
} ) ;
DeviceInfo . getAvailableLocationProviders ( ) . then ( ( providers ) => {
// {
// headingAvailable: false
// isRangingAvailable: false
// locationServicesEnabled: true
// significantLocationChangeMonitoringAvailable: true
// }
} ) ;
Obtém o nível de brilho atual da tela principal do dispositivo. Atualmente apenas iOS. Retorna um número entre 0,0 e 1,0, inclusive.
DeviceInfo . getBrightness ( ) . then ( ( brightness ) => {
// iOS: 0.6
} ) ;
Compatível com Windows, iOS e Android (suporte web para APIs relacionadas à bateria/carregamento).
Disparado quando o nível da bateria muda; enviado no máximo uma vez por minuto.
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
} ) ;
Disparado quando o nível da bateria é considerado baixo (várias vezes até ser carregada)
Plataforma | Percentagem |
---|---|
iOS | 20 |
Android | 15 |
Rede | 20 |
Windows | 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
} ) ;
Disparado quando o estado da bateria muda ou o dispositivo entra no modo de economia de energia, por exemplo, quando o dispositivo entra no modo de carregamento ou é desconectado.
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,
// }
} ) ;
Obtém a hora em que o aplicativo foi instalado pela primeira vez, em milissegundos.
import { useFirstInstallTime } from 'react-native-device-info' ;
const { loading , result } = useFirstInstallTime ( ) ; // { loading: true, result: 1517681764528}
< Text > { loading ? 'loading...' : result } < / Text > ;
Obtém o nome do dispositivo.
import { useDeviceName } from 'react-native-device-info' ;
const { loading , result } = useDeviceName ( ) ; // { loading: true, result: "Becca's iPhone 6"}
< Text > { loading ? 'loading...' : result } < / Text > ;
Informa se o dispositivo possui um recurso específico do sistema.
import { useHasSystemFeature } from 'react-native-device-info' ;
const { loading , result } = useHasSystemFeature ( 'amazon.hardware.fire_tv' ) ; // { loading: true, result: false }
< Text > { loading ? 'loading...' : result } < / Text > ;
Verifique se o aplicativo está sendo executado em um emulador.
import { useIsEmulator } from 'react-native-device-info' ;
const { loading , result } = useIsEmulator ( ) ; // { loading: true, result: false }
< Text > { loading ? 'loading...' : result } < / Text > ;
Obtém o fabricante do dispositivo.
import { useManufacturer } from 'react-native-device-info' ;
const { loading , result } = useManufacturer ( ) ; // { loading: true, result: "Apple"}
< Text > { loading ? 'loading...' : result } < / Text > ;
Informa se o dispositivo está conectado a um fone de ouvido com fio ou fones de ouvido bluetooth.
Este gancho assina o evento RNDeviceInfo_headphoneConnectionDidChange
e atualiza o campo de result
de acordo.
import { useIsHeadphonesConnected } from 'react-native-device-info' ;
const { loading , result } = useIsHeadphonesConnected ( ) ; // { loading: true, result: false}
< Text > { loading ? 'loading...' : result } < / Text > ;
Informa se o dispositivo está conectado a um fone de ouvido com fio.
Este gancho assina o evento RNDeviceInfo_headphoneWiredConnectionDidChange
e atualiza o campo de result
de acordo.
import { useIsWiredHeadphonesConnected } from 'react-native-device-info' ;
const { loading , result } = useIsWiredHeadphonesConnected ( ) ; // { loading: true, result: false}
< Text > { loading ? 'loading...' : result } < / Text > ;
Informa se o dispositivo está conectado a fones de ouvido bluetooth.
Este gancho assina o evento RNDeviceInfo_headphoneBluetoothConnectionDidChange
e atualiza o campo de result
de acordo.
import { useIsBluetoothHeadphonesConnected } from 'react-native-device-info' ;
const { loading , result } = useIsBluetoothHeadphonesConnected ( ) ; // { loading: true, result: false}
< Text > { loading ? 'loading...' : result } < / Text > ;
Obtém o nível de brilho atual da tela principal do dispositivo. Atualmente apenas iOS. Retorna um número entre 0,0 e 1,0, inclusive.
Este gancho se inscreve no evento RNDeviceInfo_brightnessDidChange
e atualiza o campo brightness
de acordo.
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
} ) ;
=======
Se precisar verificar o tipo de dispositivo no lado nativo, você pode usar o seguinte:
import com . learnium . resolver . DeviceTypeResolver
...
deviceTypeResolver = new DeviceTypeResolver ( context );
...
//Check if the device is a Tablet:
if ( deviceTypeResolver . isTablet ){
...
} else {
...
}
Ao instalar ou usar react-native-device-info
, você pode encontrar os seguintes problemas:
react-native-device-info
usa com.google.android.gms:play-services-gcm
para fornecer getInstanceId(). Isso pode levar a conflitos durante a construção do aplicativo Android.
Se você estiver usando uma versão diferente de com.google.android.gms:play-services-gcm
em seu aplicativo, poderá definir a variável gradle googlePlayServicesVersion
em seu arquivo build.gradle
para informar react-native-device-info
qual versão deveria exigir. Veja o projeto de exemplo incluído aqui para obter uma amostra.
Se você estiver usando uma biblioteca diferente que entre em conflito com com.google.android.gms:play-services-gcm
e tiver certeza de que sabe o que está fazendo para evitar conflitos de versão, você pode simplesmente ignorar essa dependência em seu arquivo gradle:
compile(project( ' :react-native-device-info ' )) {
exclude group : ' com.google.android.gms '
}
Parece ser um bug causado por react-native link
. Você pode excluir manualmente libRNDeviceInfo-tvOS.a
em Xcode -> [Your iOS build target] -> Build Phrases -> Link Binary with Libraries
.
Este é um log de nível de sistema que pode ser desativado executando: xcrun simctl spawn booted log config --mode "level:off" --subsystem com.apple.CoreTelephony
. Para desfazer o comando, você pode executar: 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
contém código nativo e precisa ser ridicularizado. O suporte ao Jest Snapshot pode funcionar.
Se você não tiver um arquivo Jest Setup configurado, adicione o seguinte às configurações do Jest e crie o arquivo jest.setup.js na raiz do projeto:
setupFiles: [ '/jest.setup.js' ] ;
Você deve então adicionar o seguinte ao seu arquivo de configuração Jest para simular o módulo nativo DeviceInfo:
import mockRNDeviceInfo from 'react-native-device-info/jest/react-native-device-info-mock' ;
jest . mock ( 'react-native-device-info' , ( ) => mockRNDeviceInfo ) ;
Confira o projeto de exemplo para obter mais informações.
Algumas das APIs (como getBatteryState) lançarão avisos em determinadas condições, como no tvOS ou no emulador de iOS. Isto não será visível na produção, mas mesmo no desenvolvimento pode ser irritante. É útil ter avisos porque esses dispositivos não retornam nenhum estado, e isso pode ser surpreendente, levando a problemas de suporte no GitHub. Os avisos têm como objetivo educar você como desenvolvedor. Se os avisos forem problemáticos, você pode tentar isso em seu código para suprimi-los:
import { LogBox } from 'react-native' ;
LogBox . ignoreLogs ( [ 'Battery state' ] ) ;
Veja o CHANGELOG.md.
Por favor, consulte o contributing guide
.
Como cortesia aos desenvolvedores, esta biblioteca foi tornada compatível na v0.21.6 com react-native-dom e react-native-web, fornecendo um polyfill vazio para evitar quebras de compilações.
Somente getUserAgent() retornará um valor correto. Todos os outros métodos da API retornarão um valor "vazio" de seu tipo de retorno documentado: 0
para números, ''
para strings, false
para booleanos.