ข้อมูลอุปกรณ์สำหรับ React Native
iOS Podfile ของคุณจะต้องย้ายไปเป็น iOS 10 ขั้นต่ำ v7 ของโมดูลนี้ไม่รองรับ iOS9 อีกต่อไป
ใช้ npm:
npm install --save react-native-device-info
หรือใช้เส้นด้าย:
yarn add react-native-device-info
หากคุณต้องการใช้การติดตามการติดตั้งผู้อ้างอิง คุณจะต้องเพิ่มการกำหนดค่านี้ไปยังการกำหนดค่า 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 เป็นโมฆะ" เป็นต้น ด้วยเหตุนี้จึงมีการนำการลิงก์อัตโนมัติมาใช้ และควรใช้ในโปรเจ็กต์ของคุณ
รองรับการลิงก์อัตโนมัติสำหรับทุกแพลตฟอร์ม (แม้แต่ windows บน React Native >= 0.63!)
เวอร์ชันก่อนหน้าต้องทำการลิงก์ด้วยตนเอง ไม่มีการให้การสนับสนุนสำหรับเวอร์ชัน react-native ก่อนหน้านี้ แต่คุณอาจอ้างถึง 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 ทุกรายการ โปรดดูแอปตัวอย่างหากคุณมีคำถาม และหากคุณคิดว่าคุณพบปัญหา ตรวจสอบให้แน่ใจว่าคุณสามารถทำซ้ำได้โดยใช้แอปตัวอย่างก่อนที่จะรายงาน ขอบคุณ
วิธี | ประเภทการส่งคืน | ไอโอเอส | หุ่นยนต์ | หน้าต่าง | เว็บ | วิสัยทัศน์ระบบปฏิบัติการ |
---|---|---|---|---|---|---|
รับ AndroidId() | Promise | |||||
รับApiLevel() | Promise | |||||
รับชื่อแอปพลิเคชัน () | string | |||||
getAvailableLocationProviders () | Promise | |||||
getBaseOs() | Promise | |||||
getBuildId() | Promise | |||||
รับระดับแบตเตอรี่() | Promise | |||||
รับ Bootloader() | Promise | |||||
รับแบรนด์() | string | |||||
getBuildNumber() | string | |||||
getBundleId() | string | |||||
isCameraPresent () | Promise | |||||
getCarrier() | Promise | |||||
รับชื่อรหัส() | Promise | |||||
รับอุปกรณ์() | Promise | |||||
รับรหัสอุปกรณ์() | string | |||||
รับประเภทอุปกรณ์() | string | |||||
รับการแสดงผล() | Promise | |||||
รับชื่ออุปกรณ์() | Promise | |||||
getDeviceToken() | Promise | |||||
getFirstInstallTime() | Promise | |||||
รับลายนิ้วมือ() | Promise | |||||
getFontScale() | Promise | |||||
รับ FreeDiskStorage() | Promise | |||||
getFreeDiskStorageเก่า () | Promise | |||||
รับฮาร์ดแวร์() | Promise | |||||
รับโฮสต์() | Promise | |||||
getHostNames() | Promise | |||||
รับที่อยู่ IP() | Promise | |||||
รับส่วนเพิ่ม() | Promise | |||||
getInstallerPackageName() | Promise | |||||
รับการติดตั้งผู้อ้างอิง () | Promise | |||||
getInstanceId() | Promise | |||||
getLastUpdateTime() | Promise | |||||
getMacAddress() | Promise | |||||
รับผู้ผลิต() | Promise | |||||
getMaxMemory() | Promise | |||||
รับโมเดล() | string | |||||
รับ PowerState() | Promise | |||||
รับผลิตภัณฑ์() | Promise | |||||
getPreviewSdkInt() | Promise | |||||
getReadableVersion() | string | |||||
รับหมายเลขซีเรียล () | Promise | |||||
รับแพทช์ความปลอดภัย() | Promise | |||||
getStartupTime() | Promise | |||||
getSystemAvailableFeatures() | Promise | |||||
getSystemName() | string | |||||
getSystemVersion() | string | |||||
รับแท็ก() | Promise | |||||
รับประเภท() | Promise | |||||
getTotalDiskCapacity() | Promise | |||||
getTotalDiskCapacityเก่า() | Promise | |||||
ได้รับTotalMemory() | Promise | |||||
getUniqueId() | Promise | |||||
getUsedMemory () | Promise | |||||
getUserAgent() | Promise | |||||
getUserAgentSync() | string | |||||
รับเวอร์ชัน() | string | |||||
รับความสว่าง() | Promise | |||||
มี Gms() | Promise | |||||
มีHms() | Promise | |||||
มีรอยบาก() | boolean | |||||
hasDynamicIsland() | boolean | |||||
hasSystemFeature() | Promise | |||||
isAirplaneMode () | Promise | |||||
คือการชาร์จแบตเตอรี่() | Promise | |||||
เป็นโปรแกรมจำลอง() | Promise | |||||
isKeyboardConnected () | Promise | |||||
เป็นแนวนอน() | Promise | |||||
isLocationEnabled () | Promise | |||||
isMouseConnected() | Promise | |||||
isHeadphonesConnected() | Promise | |||||
isWiredหูฟังเชื่อมต่อ() | Promise | |||||
isBluetoothHeadphonesConnected() | Promise | |||||
isPinOrชุดลายนิ้วมือ() | Promise | |||||
เป็นแท็บเล็ต() | boolean | |||||
คืออุปกรณ์ LowRam() | 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 Simulator
หมายเลขเวอร์ชันของ bootloader ของระบบ
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" หากนี่คือรุ่น release
DeviceInfo . getCodename ( ) . then ( ( codename ) => {
// "REL"
} ) ;
ชื่อของการออกแบบอุตสาหกรรม
DeviceInfo . getDevice ( ) . then ( ( device ) => {
// "walleye"
} ) ;
รับรหัสอุปกรณ์
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 ไม่ต้องการมัน คุณสามารถลบสิ่งนั้นออกจาก 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"
} ) ;
รับขนาดตัวอักษรของอุปกรณ์ ขนาดแบบอักษรคืออัตราส่วนของแบบอักษรระบบปัจจุบันต่อขนาดแบบอักษร "ปกติ" ดังนั้นหากข้อความปกติคือ 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)
} ) ;
API ที่ใช้โดยวิธีนี้สำหรับ Android มีการเปลี่ยนแปลงในเวอร์ชัน 6.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 ปัจจุบันของอุปกรณ์ (ของ wifi เท่านั้น) เปลี่ยนเป็น 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 อินสแตนซ์ของแอปพลิเคชัน
การดำเนินการนี้จะพยายามรับรหัสอินสแตนซ์จากแหล่งที่มาเหล่านี้ ตามลำดับดังนี้:
instanceId
ในไฟล์ SharedPreferences react-native-device-info
firebaseBomVersion
หรือ firebaseIidVersion
ถูกกำหนดไว้ใน gradle ext - deprecated )googlePlayServicesIidVersion
หรือ googlePlayServicesVersion
ถูกกำหนดไว้ใน gradle ext - deprecated )หากคุณกำลังใช้แหล่งที่มาที่เลิกใช้งานแล้ว รหัสอินสแตนซ์ที่สร้างขึ้นจะถูกจัดเก็บไว้ในการตั้งค่าที่ใช้ร่วมกัน ดังนั้นจึงจะมีความเสถียรในระหว่างเวอร์ชันหลักนี้ของ 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: วิธีนี้จะส่งคืน "02:00:00:00:00:00" เสมอ เนื่องจากการเรียกข้อมูลที่อยู่ MAC ถูกปิดใช้งานตั้งแต่ iOS 7
รับผู้ผลิตอุปกรณ์
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 ในแอปพลิเคชันของคุณ โปรดปฏิบัติตามเอกสารนี้เพื่อเพิ่มความสามารถในไฟล์ Manifest ของคุณ
ระดับแพตช์ความปลอดภัยที่ผู้ใช้มองเห็นได้
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) และอาจส่งผลให้แอปของคุณถูกลบหรือปฏิเสธ หากใช้โดยไม่ได้รับความยินยอมจากผู้ใช้หรือเพื่อวัตถุประสงค์ที่ไม่ได้รับการอนุมัติ โปรดดูนโยบายของร้านค้าสำหรับข้อมูลเพิ่มเติม (ดูหมายเหตุด้านล่าง)
รับ 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 รหัสนี้ (ANDROID_ID) จะเหมือนเดิมเสมอเมื่อคุณตั้งค่าโทรศัพท์
- android: นโยบาย Google Play โปรดดู "ตัวระบุอุปกรณ์ถาวร" Huawei - แนวทางการตรวจสอบ AppGallery ดู "ตัวระบุอุปกรณ์ถาวร" และ "การได้รับความยินยอมจากผู้ใช้"
วิธีนี้มีไว้สำหรับ iOS
สิ่งนี้จะซิงโครไนซ์รหัสเฉพาะกับ IDFV
หรือตั้งค่าสตริงสุ่มใหม่
บน iOS จะใช้ตัวระบุ DeviceUID
uid บนแพลตฟอร์มอื่น เพียงเรียก getUniqueId()
ในโมดูลนี้
DeviceInfo . syncUniqueId ( ) . then ( ( uniqueId ) => {
// iOS: "FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9"
// Android: "dd96dec43fb81c97"
// Windows: ?
} ) ;
- หากผู้ใช้ย้ายหรือกู้คืนข้อมูลจากอุปกรณ์ iOS เครื่องหนึ่งไปยังอุปกรณ์ iOS เครื่องที่สอง ผู้ใช้จะมีอุปกรณ์สองเครื่องที่แตกต่างกันซึ่งมี
uniqueId
เดียวกันใน Keychain/NSUserDefaults ผู้ใช้สามารถเรียกsyncUniqueId()
บนอุปกรณ์ iOS ใหม่ได้ ซึ่งจะอัปเดตuniqueId
ของเขาจากIDFV
หรือสตริงสุ่ม
รับข้อมูลการใช้งานหน่วยความจำของแอป หน่วยเป็นไบต์
หมายเหตุ: วิธีการนี้มีไว้สำหรับการดีบักหรือการสร้าง 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: ?
} ) ;
รับเวอร์ชันแอปพลิเคชัน โปรดทราบว่าสตริงเวอร์ชันมีการจัดรูปแบบอุปกรณ์/ระบบปฏิบัติการ และสามารถมีข้อมูลเพิ่มเติมใดๆ ได้ (เช่น หมายเลขบิลด์ ฯลฯ) หากคุณต้องการแน่ใจเกี่ยวกับรูปแบบเวอร์ชัน คุณสามารถใช้นิพจน์ทั่วไปเพื่อรับส่วนที่ต้องการของสตริงเวอร์ชันที่ส่งคืนได้
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
บอกว่าผู้ใช้เปลี่ยน Display Zoom เป็น Zoomed หรือไม่
let isDisplayZoomed = DeviceInfo . isDisplayZoomed ( ) ;
// true
บอกว่าอุปกรณ์อยู่ในโหมดแท็บเล็ตหรือไม่
let isTabletMode = DeviceInfo . isTabletMode ( ) ;
// true
บอกว่าอุปกรณ์อยู่ในโหมดแนวนอนหรือไม่
DeviceInfo . isLandscape ( ) . then ( ( isLandscape ) => {
// true
} ) ;
บอกว่าอุปกรณ์มีเมาส์เชื่อมต่ออยู่หรือไม่
let isMouseConnected = DeviceInfo . isMouseConnected ( ) ;
// true
บอกว่าอุปกรณ์รองรับบริการ Google Mobile หรือไม่
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'
รายการเรียงลำดับของ ABI 32 บิตที่อุปกรณ์นี้รองรับ
DeviceInfo . supported32BitAbis ( ) . then ( ( abis ) => {
// ["armeabi-v7a", "armeabi"]
} ) ;
รายการเรียงลำดับของ ABI 64 บิตที่อุปกรณ์นี้รองรับ
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
} ) ;
เริ่มทำงานเมื่อระดับแบตเตอรี่เหลือน้อย (หลายครั้งจนกว่าจะชาร์จ)
แพลตฟอร์ม | เปอร์เซ็นต์ |
---|---|
ไอโอเอส | 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
เวอร์ชันอื่นในแอปของคุณ คุณสามารถกำหนดตัวแปร gradle googlePlayServicesVersion
ในไฟล์ build.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
คุณสามารถลบ 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 Setup คุณควรเพิ่มสิ่งต่อไปนี้ในการตั้งค่า Jest ของคุณและสร้างไฟล์ jest.setup.js ในรูทโปรเจ็กต์:
setupFiles: [ '/jest.setup.js' ] ;
จากนั้นคุณควรเพิ่มสิ่งต่อไปนี้ลงในไฟล์การตั้งค่า Jest ของคุณเพื่อจำลอง DeviceInfo Native Module:
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 กับ react-native-dom และ react-native-web โดยจัดให้มี polyfill เปล่าเพื่อหลีกเลี่ยงการพังบิลด์
เฉพาะ getUserAgent() เท่านั้นที่จะคืนค่าที่ถูกต้อง วิธี API อื่นๆ ทั้งหมดจะส่งกลับค่า "ว่าง" ของประเภทการส่งคืนที่บันทึกไว้: 0
สำหรับตัวเลข ''
สำหรับสตริง false
สำหรับบูลีน