ข้อมูลอุปกรณ์สำหรับ 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<string> | |||||
รับApiLevel() | Promise<number> | |||||
รับชื่อแอปพลิเคชัน () | string | |||||
getAvailableLocationProviders () | Promise<Object> | |||||
getBaseOs() | Promise<string> | |||||
getBuildId() | Promise<string> | |||||
รับระดับแบตเตอรี่ () | Promise<number> | |||||
รับ Bootloader() | Promise<string> | |||||
รับแบรนด์() | string | |||||
getBuildNumber() | string | |||||
getBundleId() | string | |||||
isCameraPresent () | Promise<boolean> | |||||
getCarrier() | Promise<string> | |||||
รับชื่อรหัส() | Promise<string> | |||||
รับอุปกรณ์() | Promise<string> | |||||
รับรหัสอุปกรณ์() | string | |||||
รับประเภทอุปกรณ์() | string | |||||
รับการแสดงผล() | Promise<string> | |||||
รับชื่ออุปกรณ์() | Promise<string> | |||||
getDeviceToken() | Promise<string> | |||||
getFirstInstallTime() | Promise<number> | |||||
รับลายนิ้วมือ() | Promise<string> | |||||
getFontScale() | Promise<number> | |||||
รับ FreeDiskStorage() | Promise<number> | |||||
getFreeDiskStorageเก่า() | Promise<number> | |||||
รับฮาร์ดแวร์() | Promise<string> | |||||
รับโฮสต์() | Promise<string> | |||||
getHostNames() | Promise<string[]> | |||||
รับที่อยู่ IP() | Promise<string> | |||||
รับส่วนเพิ่ม() | Promise<string> | |||||
getInstallerPackageName() | Promise<string> | |||||
รับการติดตั้งผู้อ้างอิง () | Promise<string> | |||||
getInstanceId() | Promise<string> | |||||
getLastUpdateTime() | Promise<number> | |||||
getMacAddress() | Promise<string> | |||||
รับผู้ผลิต() | Promise<string> | |||||
getMaxMemory() | Promise<number> | |||||
รับโมเดล() | string | |||||
รับ PowerState() | Promise<object> | |||||
รับผลิตภัณฑ์() | Promise<string> | |||||
getPreviewSdkInt() | Promise<number> | |||||
getReadableVersion() | string | |||||
รับหมายเลขซีเรียล () | Promise<string> | |||||
รับแพทช์ความปลอดภัย() | Promise<string> | |||||
getStartupTime() | Promise<number> | |||||
getSystemAvailableFeatures() | Promise<string[]> | |||||
getSystemName() | string | |||||
getSystemVersion() | string | |||||
รับแท็ก() | Promise<string> | |||||
รับประเภท() | Promise<string> | |||||
getTotalDiskCapacity() | Promise<number> | |||||
getTotalDiskCapacityเก่า () | Promise<number> | |||||
ได้รับTotalMemory() | Promise<number> | |||||
getUniqueId() | Promise<string> | |||||
getUsedMemory () | Promise<number> | |||||
getUserAgent() | Promise<string> | |||||
getUserAgentSync() | string | |||||
รับเวอร์ชัน() | string | |||||
รับความสว่าง() | Promise<number> | |||||
มี Gms() | Promise<boolean> | |||||
มีHms() | Promise<boolean> | |||||
มีรอยบาก() | boolean | |||||
hasDynamicIsland() | boolean | |||||
hasSystemFeature() | Promise<boolean> | |||||
isAirplaneMode () | Promise<boolean> | |||||
คือการชาร์จแบตเตอรี่() | Promise<boolean> | |||||
เป็นโปรแกรมจำลอง() | Promise<boolean> | |||||
isKeyboardConnected () | Promise<bool> | |||||
เป็นแนวนอน() | Promise<boolean> | |||||
isLocationEnabled () | Promise<boolean> | |||||
isMouseConnected() | Promise<bool> | |||||
isHeadphonesConnected() | Promise<boolean> | |||||
isWiredหูฟังเชื่อมต่อ() | Promise<boolean> | |||||
isBluetoothHeadphonesConnected() | Promise<boolean> | |||||
isPinOrชุดลายนิ้วมือ() | Promise<boolean> | |||||
เป็นแท็บเล็ต() | boolean | |||||
คืออุปกรณ์ LowRam() | boolean | |||||
isDisplayZoomed () | boolean | |||||
isTabletMode() | Promise<bool> | |||||
รองรับ32BitAbis() | Promise<string[]> | |||||
รองรับ64BitAbis() | Promise<string[]> | |||||
รองรับAbis() | Promise<string[]> | |||||
syncUniqueId() | Promise<string> | |||||
getSupportedMediaTypeList() | Promise<string[]> |
รับระดับ API
DeviceInfo . getApiLevel ( ) . then ( ( apiLevel ) => {
// iOS: ?
// Android: 25
// Windows: ?
} ) ;
ดูระดับ API
รับ ANDROID_ID ดูเอกสารประกอบ API สำหรับการใช้งานที่เหมาะสม
DeviceInfo . getAndroidId ( ) . then ( ( androidId ) => {
// androidId here
} ) ;
รับชื่อแอปพลิเคชัน
let appName = DeviceInfo . getApplicationName ( ) ;
// AwesomeApp
ระบบปฏิบัติการพื้นฐานที่สร้างโดยผลิตภัณฑ์นั้นยึดตาม
DeviceInfo . getBaseOs ( ) . then ( ( baseOs ) => {
// "Windows", "Android" etc
} ) ;
รับระดับแบตเตอรี่ของอุปกรณ์เป็นแบบทุ่นที่ประกอบด้วยระหว่าง 0 ถึง 1
DeviceInfo . getBatteryLevel ( ) . then ( ( batteryLevel ) => {
// 0.759999
} ) ;
เพื่อให้สามารถรับระดับแบตเตอรี่จริงได้ ให้เปิดใช้งานโหมดการตรวจสอบแบตเตอรี่สำหรับแอปพลิเคชัน เพิ่มรหัสนี้:
[UIDevice currentDevice ].batteryMonitoringEnabled = true ;
ไปที่แอปพลิเคชัน AppDelegate.m:didFinishLaunchingWithOptions:
ส่งกลับ -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/