معلومات الجهاز لـ React Native.
سيحتاج iOS Podfile الخاص بك إلى الانتقال إلى نظام التشغيل iOS 10 كحد أدنى. الإصدار 7 من هذه الوحدة لم يعد يدعم iOS9.
باستخدام npm:
npm install --save react-native-device-info
أو باستخدام الغزل:
yarn add react-native-device-info
إذا كنت تريد استخدام تتبع مُحيل التثبيت، فستحتاج إلى إضافة هذا التكوين إلى تكوين Proguard الخاص بك
-keep class com.android.installreferrer.api.** {
*;
}
إذا كنت تواجه مشكلات مع hasGms() في تطبيقات الإصدار الخاصة بك، فيرجى إضافة القاعدة التالية إلى تكوين 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 is null" وما إلى ذلك. ولهذا السبب تم تنفيذ الارتباط التلقائي، ويجب استخدامه في مشروعك.
يتم دعم الارتباط التلقائي لجميع الأنظمة الأساسية (حتى النوافذ الموجودة على React الأصلي >= 0.63!)
تحتاج الإصدارات السابقة إلى القيام بالربط اليدوي. لا يتم تقديم أي دعم لهذه الإصدارات السابقة من التفاعل الأصلي ولكن يمكنك الرجوع إلى الإصدارات الأقدم من هذا الملف التمهيدي إذا أردت. الترقية إلى الإصدارات الحديثة من رد الفعل الأصلي. استخدم أداة upgrade-helper
على الإنترنت إذا لزم الأمر.
import DeviceInfo from 'react-native-device-info' ;
// or ES6+ destructured imports
import { getUniqueId , getManufacturer } from 'react-native-device-info' ;
لاحظ أن العديد من واجهات برمجة التطبيقات (APIs) خاصة بالنظام الأساسي. إذا لم يكن هناك تنفيذ للنظام الأساسي، فإن قيم الإرجاع "الافتراضية" التي ستتلقاها هي "unknown"
للسلسلة، -1
للرقم، false
للقيمة المنطقية. ستكون المصفوفات والكائنات فارغة ( []
و {}
على التوالي).
تُرجع معظم واجهات برمجة التطبيقات (APIs) وعدًا ولكنها تحتوي أيضًا على واجهة برمجة تطبيقات مقابلة مع Sync
في النهاية تعمل بشكل متزامن. على سبيل المثال، قد تفضل استدعاء isCameraPresentSync()
أثناء تشغيل تطبيقك لتجنب المكالمات غير المتزامنة أثناء الأجزاء الأولى من بدء تشغيل التطبيق.
ملاحظة حول getUserAgentSync
على الرغم من أن الطريقة غير المتزامنة getUserAgent
متاحة على كلا النظامين الأساسيين، إلا أن getUserAgentSync
مدعوم فقط على Android.
يعرض التطبيق النموذجي الموجود في هذا المستودع مثالًا لاستخدام كل واجهة برمجة تطبيقات فردية، واستشر التطبيق النموذجي إذا كانت لديك أسئلة، وإذا كنت تعتقد أنك ترى مشكلة، فتأكد من أنه يمكنك إعادة إنتاجها باستخدام التطبيق النموذجي قبل الإبلاغ عنها، شكرًا لك.
طريقة | نوع الإرجاع | دائرة الرقابة الداخلية | أندرويد | ويندوز | ويب | VisionOS |
---|---|---|---|---|---|---|
getAndroidId() | Promise<string> | ✅ | ||||
getApiLevel() | Promise<number> | ✅ | ||||
اسم التطبيق () | string | ✅ | ✅ | ✅ | ✅ | |
getAvailableLocationProviders() | Promise<Object> | ✅ | ✅ | ✅ | ||
getBaseOs() | Promise<string> | ✅ | ✅ | ✅ | ||
getBuildId() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
الحصول على مستوى البطارية () | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
getBootloader() | Promise<string> | ✅ | ||||
الحصول على العلامة التجارية () | string | ✅ | ✅ | ✅ | ✅ | |
getBuildNumber() | string | ✅ | ✅ | ✅ | ✅ | |
getBundleId() | string | ✅ | ✅ | ✅ | ✅ | |
isCameraPresent() | Promise<boolean> | ✅ | ✅ | ✅ | ||
احصل على كاريير () | Promise<string> | ✅ | ✅ | |||
الحصول على اسم الرمز () | Promise<string> | ✅ | ||||
الحصول على الجهاز () | Promise<string> | ✅ | ||||
معرف الجهاز () | string | ✅ | ✅ | ✅ | ✅ | |
getDeviceType() | string | ✅ | ✅ | ✅ | ||
الحصول على العرض () | Promise<string> | ✅ | ||||
getDeviceName() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
getDeviceToken() | Promise<string> | ✅ | ✅ | |||
getFirstInstallTime() | Promise<number> | ✅ | ✅ | ✅ | ✅ | |
الحصول على بصمة () | Promise<string> | ✅ | ||||
getFontScale() | Promise<number> | ✅ | ✅ | ✅ | ||
الحصول على FreeDiskStorage() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
الحصول على FreeDiskStorageOld () | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
الحصول على الأجهزة () | Promise<string> | ✅ | ||||
احصل على المضيف () | Promise<string> | ✅ | ✅ | |||
getHostNames() | Promise<string[]> | ✅ | ||||
getIpAddress() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
الحصول على تزايدي () | Promise<string> | ✅ | ||||
getInstallerPackageName() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
getInstallReferrer() | Promise<string> | ✅ | ✅ | ✅ | ||
getInstanceId() | Promise<string> | ✅ | ||||
الحصول علىLastUpdateTime() | Promise<number> | ✅ | ||||
الحصول على عنوان ماك () | Promise<string> | ✅ | ✅ | ✅ | ||
الحصول على المصنع () | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
getMaxMemory() | Promise<number> | ✅ | ✅ | ✅ | ||
الحصول على النموذج () | string | ✅ | ✅ | ✅ | ✅ | |
الحصول على باور ستيت () | Promise<object> | ✅ | ✅ | ✅ | ✅ | ✅ |
الحصول على المنتج () | Promise<string> | ✅ | ||||
الحصول علىPreviewSdkInt() | Promise<number> | ✅ | ||||
الحصول على نسخة قابلة للقراءة () | string | ✅ | ✅ | ✅ | ✅ | |
الحصول على الرقم التسلسلي () | Promise<string> | ✅ | ✅ | |||
getSecurityPatch() | Promise<string> | ✅ | ||||
getStartupTime() | Promise<number> | ✅ | ✅ | ✅ | ||
ميزات النظام المتوفرة () | Promise<string[]> | ✅ | ||||
اسم النظام () | string | ✅ | ✅ | ✅ | ✅ | |
الحصول على SystemVersion () | string | ✅ | ✅ | ✅ | ✅ | |
الحصول على العلامات () | Promise<string> | ✅ | ||||
الحصول على النوع () | Promise<string> | ✅ | ||||
getTotalDiskCapacity() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalDiskCapacityOld() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
getTotalMemory() | Promise<number> | ✅ | ✅ | ✅ | ✅ | |
getUniqueId() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
getUsedMemory() | Promise<number> | ✅ | ✅ | ✅ | ✅ | ✅ |
getUserAgent() | Promise<string> | ✅ | ✅ | ✅ | ✅ | |
getUserAgentSync() | string | ✅ | ✅ | |||
الحصول على النسخة () | string | ✅ | ✅ | ✅ | ✅ | |
الحصول على السطوع () | Promise<number> | ✅ | ||||
hasGms() | Promise<boolean> | ✅ | ||||
hasHms() | Promise<boolean> | ✅ | ||||
hasNotch() | boolean | ✅ | ✅ | ✅ | ✅ | |
hasDynamicIsland() | boolean | ✅ | ✅ | ✅ | ✅ | |
hasSystemFeature() | Promise<boolean> | ✅ | ||||
وضع الطائرة () | Promise<boolean> | ✅ | ✅ | |||
isBatteryCharging() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | ✅ |
isEmulator() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | |
isKeyboardConnected() | Promise<bool> | ✅ | ||||
isLandscape() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | |
isLocationEnabled() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | |
isMouseConnected() | Promise<bool> | ✅ | ||||
isHeadphonesConnected() | Promise<boolean> | ✅ | ✅ | ✅ | ||
isWiredHeadphonesConnected() | Promise<boolean> | ✅ | ✅ | ✅ | ||
isBluetoothHeadphonesConnected() | Promise<boolean> | ✅ | ✅ | ✅ | ||
isPinOrFingerprintSet() | Promise<boolean> | ✅ | ✅ | ✅ | ✅ | |
isTablet() | boolean | ✅ | ✅ | ✅ | ✅ | |
isLowRamDevice() | boolean | ✅ | ||||
isDisplayZoomed() | boolean | ✅ | ||||
isTabletMode() | Promise<bool> | ✅ | ||||
المدعومة32BitAbis () | Promise<string[]> | ✅ | ||||
مدعوم64BitAbis () | Promise<string[]> | ✅ | ||||
مدعومأبيس () | Promise<string[]> | ✅ | ✅ | ✅ | ✅ | |
متزامنةUniqueId() | 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
رقم إصدار أداة تحميل النظام.
DeviceInfo . getBootloader ( ) . then ( ( bootloader ) => {
// "mw8998-002.0069.00"
} ) ;
الحصول على العلامة التجارية للجهاز.
let brand = DeviceInfo . getBrand ( ) ;
// iOS: "Apple"
// Android: "xiaomi"
// Windows: ?
يحصل على رقم بناء التطبيق.
let buildNumber = DeviceInfo . getBuildNumber ( ) ;
// iOS: "89"
// Android: "4"
// Windows: ?
يحصل على معرف حزمة التطبيق.
let bundleId = DeviceInfo . getBundleId ( ) ;
// "com.example.AwesomeApp"
يخبرك إذا كان الجهاز يحتوي على أي كاميرا الآن.
DeviceInfo . isCameraPresent ( )
. then ( ( isCameraPresent ) => {
// true or false
} )
. catch ( ( cameraAccessException ) => {
// is thrown if a camera device could not be queried or opened by the CameraManager on Android
} ) ;
- يتم دعم إضافة/إزالة الكاميرا الساخنة.
- إرجاع حالة التواجد الفعلي للكاميرا. إذا كانت الكاميرا موجودة ولكن تطبيقك ليس لديه أذونات لاستخدامها، فسوف يستمر isCameraPresent في إرجاع القيمة الحقيقية
يحصل على اسم الناقل (مشغل الشبكة).
DeviceInfo . getCarrier ( ) . then ( ( carrier ) => {
// "SOFTBANK"
} ) ;
الاسم الرمزي للتطوير الحالي، أو السلسلة "REL" إذا كان هذا إصدارًا.
DeviceInfo . getCodename ( ) . then ( ( codename ) => {
// "REL"
} ) ;
اسم التصميم الصناعي .
DeviceInfo . getDevice ( ) . then ( ( device ) => {
// "walleye"
} ) ;
يحصل على معرف الجهاز.
let deviceId = DeviceInfo . getDeviceId ( ) ;
// iOS: "iPhone7,2"
// Android: "goldfish"
// Windows: "Y3R94UC#AC4"
سلسلة معرف البناء مخصصة للعرض للمستخدم.
DeviceInfo . getDisplay ( ) . then ( ( display ) => {
// "OPM2.171026.006.G1"
} ) ;
يحصل على اسم الجهاز.
DeviceInfo . getDeviceName ( ) . then ( ( deviceName ) => {
// iOS: "Becca's iPhone 6"
// Android: ?
// Windows: ?
} ) ;
كان هذا يتطلب android.permission.BLUETOOTH ولكن التطبيق الجديد في الإصدار 3 لا يحتاج إليه. يمكنك إزالة ذلك من AndroidManifest.xml الخاص بك إذا كان لديك لواجهة برمجة التطبيقات هذه. يتطلب نظام التشغيل 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
} ) ;
من موقع Developer.android.com:
تم إهمال هذه الطريقة في مستوى API 29.
قم بإرجاع دليل التخزين المشترك/الخارجي الأساسي.
ملحوظة: لا تخلط بينك وبين كلمة "خارجي" هنا. من الأفضل اعتبار هذا الدليل بمثابة وسائط/تخزين مشترك. إنه نظام ملفات يمكنه الاحتفاظ بكمية كبيرة نسبيًا من البيانات ويتم مشاركتها عبر جميع التطبيقات (لا يفرض الأذونات). تقليديًا، هذه بطاقة SD، ولكن يمكن أيضًا تنفيذها كتخزين مدمج في جهاز يختلف عن وحدة التخزين الداخلية المحمية ويمكن تركيبها كنظام ملفات على جهاز كمبيوتر.
اسم الجهاز (من سطر أوامر kernel أو /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"
} ) ;
يحصل على معرف مثيل التطبيق.
يحاول هذا الحصول على معرف المثيل من هذه المصادر، بالترتيب التالي:
instanceId
الرئيسي في ملف SharedPreferences react-native-device-info
firebaseBomVersion
أو firebaseIidVersion
في ملحق gradle - مهمل )googlePlayServicesIidVersion
أو googlePlayServicesVersion
في ملحق gradle - مهمل )إذا كنت تستخدم المصادر المهملة، فسيتم تخزين معرف المثيل الذي تم إنشاؤه في التفضيلات المشتركة بحيث يكون مستقرًا أثناء هذا الإصدار الرئيسي من 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/