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 패키지를 사용해야 하며 해당 패키지와 함께 제공되는 설명서도 있습니다.
네이티브 모듈의 링크는 새로운 반응 네이티브 개발자에게 문제를 일으키는 빈번한 소스이며 "RNDeviceInfo가 null입니다" 등과 같은 오류가 발생합니다. 이러한 이유로 자동 링크가 구현되었으며 프로젝트에서 사용해야 합니다.
자동 링크는 모든 플랫폼에서 지원됩니다(React 네이티브의 창도 >= 0.63!).
이전 버전에서는 수동으로 연결해야 합니다. 이전 반응 네이티브 버전에 대한 지원은 제공되지 않지만 원할 경우 이 README의 이전 버전을 참조할 수 있습니다. 최신 버전의 반응 네이티브로 업그레이드하세요. 필요한 경우 인터넷에서 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를 반환하지만 동기적으로 작동하는 끝에 Sync
있는 해당 API도 있습니다. 예를 들어, 앱 시작의 첫 번째 부분에서 비동기 호출을 방지하기 위해 앱 부트스트랩 중에 isCameraPresentSync()
호출하는 것을 선호할 수 있습니다.
getUserAgentSync에 대한 참고 사항
비동기 메서드 getUserAgent
두 플랫폼 모두에서 사용할 수 있지만 getUserAgentSync
는 Android에서만 지원됩니다.
이 저장소의 예제 앱은 모든 단일 API의 예제 사용법을 보여줍니다. 질문이 있는 경우 예제 앱을 참조하고, 문제가 있다고 생각되면 보고하기 전에 예제 앱을 사용하여 재현할 수 있는지 확인하세요. 감사합니다.
방법 | 반환 유형 | iOS | 기계적 인조 인간 | 윈도우 | 편물 | 비전OS |
---|---|---|---|---|---|---|
getAndroidId() | Promise | ✅ | ||||
getApi레벨() | Promise | ✅ | ||||
getApplicationName() | string | ✅ | ✅ | ✅ | ✅ | |
getAvailableLocationProviders() | Promise | ✅ | ✅ | ✅ | ||
getBaseOs() | Promise | ✅ | ✅ | ✅ | ||
getBuildId() | Promise | ✅ | ✅ | ✅ | ✅ | |
getBattery레벨() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getBootloader() | Promise | ✅ | ||||
getBrand() | string | ✅ | ✅ | ✅ | ✅ | |
getBuildNumber() | string | ✅ | ✅ | ✅ | ✅ | |
getBundleId() | string | ✅ | ✅ | ✅ | ✅ | |
isCameraPresent() | Promise | ✅ | ✅ | ✅ | ||
getCarrier() | Promise | ✅ | ✅ | |||
get코드명() | Promise | ✅ | ||||
getDevice() | Promise | ✅ | ||||
getDeviceId() | string | ✅ | ✅ | ✅ | ✅ | |
getDeviceType() | string | ✅ | ✅ | ✅ | ||
get디스플레이() | Promise | ✅ | ||||
getDeviceName() | Promise | ✅ | ✅ | ✅ | ✅ | |
getDeviceToken() | Promise | ✅ | ✅ | |||
getFirstInstallTime() | Promise | ✅ | ✅ | ✅ | ✅ | |
지문 획득() | Promise | ✅ | ||||
getFontScale() | Promise | ✅ | ✅ | ✅ | ||
getFreeDisk스토리지() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getFreeDiskStorageOld() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
하드웨어 가져오기() | Promise | ✅ | ||||
getHost() | Promise | ✅ | ✅ | |||
getHostNames() | Promise | ✅ | ||||
getIp주소() | Promise | ✅ | ✅ | ✅ | ✅ | |
getIncremental() | Promise | ✅ | ||||
getInstallerPackageName() | Promise | ✅ | ✅ | ✅ | ✅ | |
getInstallReferrer() | Promise | ✅ | ✅ | ✅ | ||
getInstanceId() | Promise | ✅ | ||||
getLastUpdateTime() | Promise | ✅ | ||||
getMac주소() | Promise | ✅ | ✅ | ✅ | ||
getManufacturer() | Promise | ✅ | ✅ | ✅ | ✅ | |
getMaxMemory() | Promise | ✅ | ✅ | ✅ | ||
getModel() | string | ✅ | ✅ | ✅ | ✅ | |
파워스테이트() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
제품 가져오기() | Promise | ✅ | ||||
getPreviewSdkInt() | Promise | ✅ | ||||
getReadableVersion() | string | ✅ | ✅ | ✅ | ✅ | |
get일련번호() | Promise | ✅ | ✅ | |||
getSecurityPatch() | Promise | ✅ | ||||
getStartupTime() | Promise | ✅ | ✅ | ✅ | ||
getSystemAvailableFeatures() | Promise | ✅ | ||||
getSystemName() | string | ✅ | ✅ | ✅ | ✅ | |
getSystemVersion() | string | ✅ | ✅ | ✅ | ✅ | |
getTags() | Promise | ✅ | ||||
getType() | Promise | ✅ | ||||
getTotalDiskCapacity() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalDiskCapacityOld() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalMemory() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUniqueId() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUsedMemory() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
getUserAgent() | Promise | ✅ | ✅ | ✅ | ✅ | |
getUserAgentSync() | string | ✅ | ✅ | |||
버전 가져오기() | string | ✅ | ✅ | ✅ | ✅ | |
밝기를 얻습니다() | Promise | ✅ | ||||
hasGms() | Promise | ✅ | ||||
hasHms() | Promise | ✅ | ||||
노치() | boolean | ✅ | ✅ | ✅ | ✅ | |
hasDynamicIsland() | boolean | ✅ | ✅ | ✅ | ✅ | |
hasSystemFeature() | Promise | ✅ | ||||
isAirplaneMode() | Promise | ✅ | ✅ | |||
isBatteryCharging() | Promise | ✅ | ✅ | ✅ | ✅ | ✅ |
isEmulator() | Promise | ✅ | ✅ | ✅ | ✅ | |
isKeyboardConnected() | Promise | ✅ | ||||
isLandscape() | Promise | ✅ | ✅ | ✅ | ✅ | |
isLocation활성화() | Promise | ✅ | ✅ | ✅ | ✅ | |
isMouseConnected() | Promise | ✅ | ||||
isHeadphonesConnected() | Promise | ✅ | ✅ | ✅ | ||
isWiredHeadphonesConnected() | Promise | ✅ | ✅ | ✅ | ||
isBluetooth헤드폰연결됨() | Promise | ✅ | ✅ | ✅ | ||
isPinOrFingerprintSet() | Promise | ✅ | ✅ | ✅ | ✅ | |
is태블릿() | 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
제품의 기반이 되는 기본 OS 빌드입니다.
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
} ) ;
개발자.Android.com에서:
이 메서드는 API 레벨 29에서 더 이상 사용되지 않습니다.
기본 공유/외부 저장소 디렉터리를 반환합니다.
참고: 여기서 "외부"라는 단어를 혼동하지 마십시오. 이 디렉터리는 미디어/공유 저장소로 생각하는 것이 더 좋습니다. 상대적으로 많은 양의 데이터를 보유할 수 있고 모든 애플리케이션에서 공유되는(권한을 적용하지 않음) 파일 시스템입니다. 전통적으로 이는 SD 카드이지만 보호되는 내부 저장소와는 별개로 장치에 내장 저장소로 구현될 수도 있고 컴퓨터에 파일 시스템으로 마운트될 수도 있습니다.
하드웨어 이름(커널 명령줄 또는 /proc에서).
DeviceInfo . getHardware ( ) . then ( hardware => {
// "walleye"
} ) ;
호스트 이름
DeviceInfo . getHost ( ) . then ( ( host ) => {
// "wprd10.hot.corp.google.com"
} ) ;
더 이상 사용되지 않음 장치의 현재 IP 주소를 가져옵니다. (Wi-Fi에서만) React-native-netinfo/netinfo 또는 React-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"
} ) ;
애플리케이션 인스턴스 ID를 가져옵니다.
이는 다음 소스에서 다음 순서로 인스턴스 ID를 가져오려고 시도합니다.
react-native-device-info
의 instanceId
키 아래 값firebaseBomVersion
또는 firebaseIidVersion
gradle ext에 정의된 경우 - 더 이상 사용되지 않음 )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/를 참조하세요.
앱이 마지막으로 업데이트된 시간을 밀리초 단위로 가져옵니다.
DeviceInfo . getLastUpdateTime ( ) . then ( ( lastUpdateTime ) => {
// Android: 1517681764992
} ) ;
네트워크 어댑터 MAC 주소를 가져옵니다.
DeviceInfo . getMacAddress ( ) . then ( ( mac ) => {
// "E5:12:D8:E5:69:97"
} ) ;
iOS: iOS 7부터 MAC 주소 검색이 비활성화되었으므로 이 메서드는 항상 "02:00:00:00:00:00"을 반환합니다.
장치 제조업체를 가져옵니다.
DeviceInfo . getManufacturer ( ) . then ( ( manufacturer ) => {
// iOS: "Apple"
// Android: "Google"
// Windows: ?
} ) ;
VM이 사용하려고 시도할 최대 메모리 양을 바이트 단위로 반환합니다.
DeviceInfo . getMaxMemory ( ) . then ( ( maxMemory ) => {
// 402653183
} ) ;
장치 모델을 가져옵니다.
iOS 경고: 장치 이름이 포함된 목록은 커뮤니티에서 관리하므로 새 장치가 지연될 수 있습니다. getDeviceId()
사용하는 것이 더 안정적이고 새 iOS 장치에서 항상 최신 상태를 유지하므로 사용하는 것이 좋습니다. 우리는 장치 이름과 함께 목록에 새로운 iOS 장치를 추가하는 풀 요청을 수락합니다.
let model = DeviceInfo . getModel ( ) ;
// iOS: ?
// Android: ?
// Windows: ?
getPhoneNumber()가 제거되었습니다. 이 방법은 더 이상 사용되지 않는 Android API를 사용합니다. 전화번호를 얻으려면 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"
} ) ;
장치 OS 이름을 가져옵니다.
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
} ) ;
장치 OS 버전을 가져옵니다.
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
} ) ;
Android용 이 메서드에서 사용하는 API는 v6.0.0에서 변경되었습니다. 이전 버전은 아래에서 getTotalDiskCapacityOld()
로 유지관리되었습니다. iOS에서 getTotalDiskCapacity()
및 getTotalDiskCapacityOld()
동일한 값을 반환합니다.
전체 디스크 저장소 크기(바이트)를 가져오는 이전 방법 구현입니다.
DeviceInfo . getTotalDiskCapacityOld ( ) . then ( ( capacity ) => {
// Android: 17179869184
// iOS: 17179869184
} ) ;
장치의 총 메모리를 바이트 단위로 가져옵니다.
DeviceInfo . getTotalMemory ( ) . then ( ( totalMemory ) => {
// 1995018240
} ) ;
이 식별자는 일부 앱 스토어(예: Huawei 또는 Google Play)에서 민감한 정보로 간주되며 사용자 동의 없이 또는 승인되지 않은 목적으로 사용하는 경우 앱이 제거되거나 거부될 수 있습니다. 자세한 내용은 매장 정책을 참조하세요(아래 참고 사항 참조).
장치 고유 ID를 가져옵니다. Android에서는 현재 이 모듈의 getAndroidId()
와 동일합니다. iOS에서는 DeviceUID
uid 식별자를 사용합니다. 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 Keychain 및 NSUserDefaults에 저장됩니다. 따라서 앱을 삭제하거나 IDFV를 재설정하더라도 동일하게 유지됩니다. 이를 영구적인 고유 ID로 신중하게 고려할 수 있습니다. 누군가가 Keychain/NSUserDefaults의 값을 수동으로 무시하거나 Apple이 Keychain 및 NSUserDefaults 구현을 변경하는 경우에만 변경할 수 있습니다. 주의: IDFV는 번들 식별자를 사용하여 계산되므로 앱 확장에서는 다릅니다.- android: Oreo 이전에는 휴대폰을 설정하면 이 ID(ANDROID_ID)가 항상 동일합니다.
- android: Google Play 정책, '영구 기기 식별자'를 참조하세요. Huawei - AppGallery 검토 지침은 "영구 장치 식별자" 및 "사용자 동의 얻기"를 참조하세요.
이 방법은 iOS용입니다.
이는 UniqueId를 IDFV
와 동기화하거나 새로운 임의 문자열을 설정합니다.
iOS에서는 DeviceUID
uid 식별자를 사용합니다. 다른 플랫폼에서는 이 모듈에서 getUniqueId()
호출하기만 하면 됩니다.
DeviceInfo . syncUniqueId ( ) . then ( ( uniqueId ) => {
// iOS: "FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9"
// Android: "dd96dec43fb81c97"
// Windows: ?
} ) ;
- 사용자가 하나의 iOS 장치에서 두 번째 iOS 장치로 데이터를 이동하거나 복원한 경우 Keychain/NSUserDefaults에 동일한
uniqueId
가진 두 개의 다른 장치가 있게 됩니다. 사용자는 새 iOS 기기에서syncUniqueId()
호출할 수 있습니다. 그러면IDFV
또는 임의의 문자열에서uniqueId
업데이트됩니다.
앱 메모리 사용량을 바이트 단위로 가져옵니다.
참고: 이 방법은 사용자 대상 프로세스 관리 UI를 디버깅하거나 구축하는 데만 사용됩니다.
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: ?
} ) ;
애플리케이션 버전을 가져옵니다. 버전 문자열은 장치/OS 형식이며 추가 데이터(예: 빌드 번호 등)를 포함할 수 있다는 점을 고려하세요. 버전 형식을 확인하려면 정규식을 사용하여 반환된 버전 문자열 중 원하는 부분을 얻을 수 있습니다.
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
기기의 RAM이 부족한지 알려줍니다.
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 모바일 서비스를 지원하는지 알려줍니다.
DeviceInfo . hasGms ( ) . then ( ( hasGms ) => {
// true
} ) ;
장치가 Huawei Mobile Services를 지원하는지 알려줍니다.
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
} ) ;
기기가 유선 헤드셋 또는 블루투스 헤드폰에 연결되어 있는지 알려줍니다.
DeviceInfo . isHeadphonesConnected ( ) . then ( ( enabled ) => {
// true or false
} ) ;
기기가 유선 헤드셋에 연결되어 있는지 알려줍니다.
DeviceInfo . isWiredHeadphonesConnected ( ) . then ( ( enabled ) => {
// true or false
} ) ;
기기가 블루투스 헤드셋에 연결되어 있는지 알려줍니다.
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 > ;
기기가 유선 헤드셋 또는 블루투스 헤드폰에 연결되어 있는지 알려줍니다.
이 후크는 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 > ;
기기가 블루투스 헤드폰에 연결되어 있는지 알려줍니다.
이 후크는 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
사용하는 경우 build.gradle
파일에 googlePlayServicesVersion
Gradle 변수를 정의하여 react-native-device-info
에 버전을 알릴 수 있습니다. 그것은 요구해야합니다. 샘플은 여기에 포함된 예제 프로젝트를 참조하세요.
com.google.android.gms:play-services-gcm
과 충돌하는 다른 라이브러리를 사용하고 있고 버전 충돌을 피하기 위해 무엇을 하고 있는지 확실히 알고 있다면 다음에서 이 종속성을 무시하면 됩니다. 귀하의 Gradle 파일 :
compile(project( ' :react-native-device-info ' )) {
exclude group : ' com.google.android.gms '
}
react-native link
로 인해 발생한 버그인 것 같습니다. Xcode -> [Your iOS build target] -> Build Phrases -> Link Binary with Libraries
에서 libRNDeviceInfo-tvOS.a
수동으로 삭제할 수 있습니다.
이는 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
참조하세요.
개발자를 위한 배려로 이 라이브러리는 빌드 중단을 방지하기 위해 빈 폴리필을 제공하여 v0.21.6에서 반응 네이티브 돔 및 반응 네이티브 웹과 호환되도록 만들어졌습니다.
getUserAgent()만 올바른 값을 반환합니다. 다른 모든 API 메서드는 문서화된 반환 유형의 "빈" 값을 반환합니다. 숫자의 경우 0
, 문자열의 경우 ''
, 부울의 경우 false
.