يقدّم Android 10 (المستوى 29 من واجهة برمجة التطبيقات) عددًا من الميزات وتغييرات السلوك لحماية خصوصية المستخدمين بشكل أفضل. تعمل هذه التغييرات على توسيع نطاق الشفافية والتحكم لدى المستخدمين في بياناتهم والإمكانات التي يمنحونها للتطبيقات. قد تعني هذه الميزات أنّ سلوكيات أو بيانات معيّنة يعتمد عليها تطبيقك قد تتصرف بشكل مختلف مقارنةً بالإصدارات القديمة من النظام الأساسي. من المفترض أن يكون التأثير في تطبيقك منخفضًا إذا كان تطبيقك يتّبع أفضل الممارسات الحالية للتعامل مع بيانات المستخدمين.
تعرض هذه الصفحة ملخّصًا لكل تغيير.
.أهم التغييرات
يتضمّن هذا القسم التغييرات الرئيسية في نظام التشغيل Android 10 المتعلّقة بالخصوصية.
الوصول إلى مساحة التخزين الخارجية على مستوى ملفات التطبيق والوسائط
يتم تلقائيًا منح التطبيقات التي تستهدف الإصدار 10 من نظام التشغيل Android والإصدارات الأحدث إذن وصول على نطاق واسع إلى وحدة تخزين خارجية أو مساحة تخزين على نطاق واسع. يمكن لهذه التطبيقات الاطّلاع على الأنواع التالية من الملفات داخل جهاز تخزين خارجي بدون الحاجة إلى طلب أي أذونات مستخدم متعلّقة بمساحة التخزين:
- الملفات في الدليل الخاص بالتطبيق، ويتم الوصول إليها باستخدام
getExternalFilesDir()
. - الصور والفيديوهات والمقاطع الصوتية التي أنشأها التطبيق من متجر الوسائط.
للتعرُّف على المزيد من المعلومات عن مساحة التخزين في نطاق محدَّد، وكيفية مشاركة الملفات المحفوظة على أجهزة تخزين خارجية والوصول إليها وتعديلها، يمكنك الاطّلاع على الأدلّة حول كيفية إدارة الملفات في وحدة التخزين الخارجية والوصول إلى ملفات الوسائط وتعديلها.
يجب منح الإذن بالوصول إلى الموقع الجغرافي للجهاز في الخلفية.
لإتاحة مزيد من التحكّم في وصول التطبيق إلى معلومات الموقع الجغرافي، يقدّم نظام التشغيل Android 10 إذن ACCESS_BACKGROUND_LOCATION
.
على عكس إذنَي
ACCESS_FINE_LOCATION
وACCESS_COARSE_LOCATION
،
لا يؤثر إذن ACCESS_BACKGROUND_LOCATION
إلا في إمكانية وصول التطبيق إلى الموقع الجغرافي عند تشغيله في الخلفية. يعتبر التطبيق على أنه يصل إلى الموقع الجغرافي في الخلفية ما لم يتم استيفاء أحد الشروط التالية:
- النشاط التابع للتطبيق مرئي.
يشغّل التطبيق خدمة تعمل في المقدّمة أعلنت أنّ نوع الخدمة التي تعمل في المقدّمة يوفّر السمة
location
.لتعريف نوع الخدمة التي تعمل في المقدّمة لخدمة في تطبيقك، عليك ضبط
targetSdkVersion
أوcompileSdkVersion
في تطبيقك على29
أو إصدار أحدث. يمكنك التعرّف على المزيد من المعلومات حول كيفية الاستفادة من الخدمات التي تعمل في المقدّمة لمواصلة الإجراءات التي يبدأها المستخدم والتي تتطلّب الوصول إلى الموقع الجغرافي.
إذا كان تطبيقك ينشئ ويرصد الحدود الجغرافية ويستهدف نظام Android 10 (مستوى واجهة برمجة التطبيقات 29) أو الإصدارات الأحدث، عليك تقديم بيان عن إذن ACCESS_BACKGROUND_LOCATION
.
يتم منح الإذن بالوصول تلقائيًا عند استهداف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأقدم.
إذا كان تطبيقك يعمل على نظام التشغيل Android 10 أو بإصدار أحدث، ولكنه يستهدف Android 9 (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم، سيطبِّق النظام الأساسي السلوك التالي:
- إذا أعلن تطبيقك عن عنصر
<uses-permission>
إما لـACCESS_FINE_LOCATION
أوACCESS_COARSE_LOCATION
، سيضيف النظام تلقائيًا عنصر<uses-permission>
لـACCESS_BACKGROUND_LOCATION
أثناء عملية التثبيت. - إذا كان تطبيقك يطلب إما
ACCESS_FINE_LOCATION
أوACCESS_COARSE_LOCATION
، يضيف النظامACCESS_BACKGROUND_LOCATION
تلقائيًا إلى الطلب.
الوصول عند ترقية الجهاز إلى Android 10
إذا منح أحد المستخدمين تطبيقك إذن الوصول إلى الموقع الجغرافي للجهاز، إما
ACCESS_COARSE_LOCATION
أو
ACCESS_FINE_LOCATION
وبعد ذلك ترقية جهازه من نظام التشغيل Android 9 إلى Android 10،
يحدِّث النظام تلقائيًا مجموعة الأذونات المستندة إلى الموقع الجغرافي التي تم منحها لتطبيقك. تعتمد مجموعة الأذونات التي يحصل عليها تطبيقك بعد الترقية
على إصدار حزمة تطوير البرامج (SDK) المستهدَف والأذونات المحددة له، كما هو موضّح
في الجدول التالي:
إصدار النظام الأساسي المستهدف | هل تم منح إذن تقريبي أم دقيق؟ |
هل تم تحديد إذن الخلفية في ملف البيان؟ |
تم تعديل حالة الإذن التلقائي. |
---|---|---|---|
الإصدار 10 من نظام التشغيل Android | نعم | نعم | الوصول إلى التطبيقات التي تعمل في المقدّمة والخلفية |
الإصدار 10 من نظام التشغيل Android | نعم | لا | الوصول إلى البيانات التي تعمل في المقدّمة فقط |
الإصدار 10 من نظام التشغيل Android | لا | (تجاهلها النظام) | بلا إذن وصول |
الإصدار 9 من نظام التشغيل Android أو الإصدارات الأقدم | نعم | تمت إضافته تلقائيًا من قِبل النظام في وقت ترقية الجهاز. | الوصول إلى التطبيقات التي تعمل في المقدّمة والخلفية |
الإصدار 9 من نظام التشغيل Android أو الإصدارات الأقدم | لا | (تجاهلها النظام) | بلا إذن وصول |
تجدر الإشارة إلى أنّه يمكن للمستخدم تغيير مستوى الوصول هذا حتى بعد أن يحدِّث النظام تلقائيًا إذن وصول تطبيقك إلى الموقع الجغرافي للجهاز. على سبيل المثال، قد يقلل المستخدم من إمكانية وصول تطبيقك إلى المقدّمة فقط أو يبطل إمكانية الوصول تمامًا. وقبل محاولة الوصول إلى الموقع الجغرافي للجهاز، لا سيما داخل خدمة تعمل في المقدّمة، يجب أن يتحقّق التطبيق ممّا إذا كان المستخدم لا يزال يسمح لتطبيقك بتلقّي معلومات الموقع الجغرافي هذه.
تم إبطال إذن الوصول عند تحديث مستوى واجهة برمجة التطبيقات المستهدَف على أجهزة Android 10.
يجب مراعاة الحالة التي سبق أن تم تثبيت تطبيقك فيها على جهاز يعمل بنظام التشغيل Android 10. وفي حال عدَّلت تطبيقك لاستهداف الإصدار 10 من نظام التشغيل Android في هذه الحالة، سيُلغي الجهاز إذن ACCESS_BACKGROUND_LOCATION
.
لمزيد من المعلومات حول كيفية استرداد موقع الجهاز أثناء تشغيل تطبيقك في الخلفية، راجِع الدليل حول تلقّي تحديثات الموقع الجغرافي الدورية.
القيود المفروضة على بدء الأنشطة من الخلفية
بدءًا من نظام التشغيل Android 10، يضع النظام قيودًا على بدء الأنشطة من الخلفية. ويساعد هذا التغيير في السلوك في الحدّ من الانقطاعات لدى المستخدم ويتيح له التحكّم بشكل أكبر في المحتوى المعروض على الشاشة. طالما أن تطبيقك يبدأ الأنشطة كنتيجة مباشرة لتفاعل المستخدم، فمن المرجح ألا يتأثر تطبيقك بهذه القيود.
لمعرفة المزيد من المعلومات عن البديل المقترَح لبدء الأنشطة من الخلفية، اطّلِع على الدليل حول كيفية تنبيه المستخدمين بالأحداث الحسّاسة للوقت في تطبيقك.
المعرّفات والبيانات
يسرد هذا القسم التغييرات المتعلّقة للتعامل مع معرّفات الأجهزة وبياناتها.
إزالة جهات الاتصال ذات الاهتمامات المشتركة
بدءًا من نظام التشغيل Android 10، لا يتتبع النظام الأساسي معلومات تقارب جهات الاتصال. ونتيجةً لذلك، إذا كان تطبيقك يجري بحثًا عن جهات اتصال المستخدم، لن يتم ترتيب النتائج حسب معدّل التفاعل.
يحتوي الدليل حول ContactsProvider
على إشعار يصف
الحقول والطرق القديمة والمحدّدة على جميع الأجهزة
بدءًا من نظام التشغيل Android 10.
التوزيع العشوائي لعناوين MAC
على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، ينقل النظام عناوين MAC عشوائية بشكل تلقائي.
إذا كان تطبيقك يتعامل مع حالة استخدام للمؤسسة، يوفّر النظام الأساسي واجهات برمجة التطبيقات للعديد من العمليات المتعلقة بعناوين MAC:
- الحصول على عنوان MAC عشوائي: يمكن لتطبيقات مالك الجهاز وتطبيقات مالك الملف الشخصي استرداد عنوان MAC العشوائي الذي تم تخصيصه لشبكة معيَّنة من خلال الاتصال على
getRandomizedMacAddress()
. - الحصول على عنوان MAC الفعلي للأجهزة: يمكن لتطبيقات مالك الجهاز استرداد عنوان MAC الفعلي للجهاز من خلال الاتصال على
getWifiMacAddress()
. وهذه الطريقة مفيدة لتتبُّع مجموعات الأجهزة.
القيود المفروضة على الوصول إلى نظام الملفات /proc/net
على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، لا يمكن للتطبيقات الوصول إلى
/proc/net
، الذي يتضمن معلومات حول حالة شبكة الجهاز. ويجب على التطبيقات
التي تحتاج إلى الوصول إلى هذه المعلومات، مثل الشبكات الافتراضية الخاصة، استخدام الفئة
NetworkStatsManager
أو
ConnectivityManager
.
فرض قيود على معرّفات الأجهزة غير القابلة لإعادة الضبط
بدءًا من نظام التشغيل Android 10، يجب أن تحصل التطبيقات على
الإذن المميّز "READ_PRIVILEGED_PHONE_STATE
" للوصول إلى
المعرِّفات غير القابلة لإعادة الضبط في الجهاز، والتي تتضمّن كلاً من IMEI والرقم التسلسلي.
تشمل الطرق المتأثّرة ما يلي:
Build
TelephonyManager
إذا لم يكن تطبيقك يملك الإذن وتحاول طلب معلومات حول المعرّفات غير القابلة لإعادة الضبط على أي حال، ستختلف استجابة النظام الأساسي بناءً على إصدار حزمة تطوير البرامج (SDK) المستهدف:
- إذا كان تطبيقك يستهدف الإصدار 10 أو الإصدارات الأحدث من نظام التشغيل Android، ستظهر
SecurityException
. - إذا كان تطبيقك يستهدف الإصدار 9 من Android (المستوى 28 لواجهة برمجة التطبيقات) أو إصدارًا أقدم، تعرِض الطريقة
بيانات
null
أو بيانات العنصر النائب إذا حصل التطبيق على إذنREAD_PHONE_STATE
. وفي حال عدم التمكُّن، تحدثSecurityException
.
ولا تحتاج العديد من حالات الاستخدام إلى معرّفات أجهزة غير قابلة لإعادة الضبط. على سبيل المثال، إذا كان تطبيقك يستخدم معرّفات أجهزة غير قابلة لإعادة الضبط لأغراض تتبُّع الإعلانات أو إحصاءات المستخدمين، يمكنك استخدام المعرّف الإعلاني على Android لحالات الاستخدام المحددة هذه بدلاً من ذلك. لمزيد من المعلومات، اطّلِع على أفضل الممارسات المتعلّقة بالمعرِّفات الفريدة.
إمكانية وصول محدودة إلى بيانات الحافظة
ما لم يكن تطبيقك هو محرِّر طريقة الإدخال (IME) التلقائي أو التطبيق الذي يتم التركيز عليه حاليًا، لا يمكن لتطبيقك الوصول إلى بيانات الحافظة على الأجهزة التي تعمل بنظام التشغيل Android 10 أو الإصدارات الأحدث.
حماية الرقم التسلسلي لجهاز USB
إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، لن يتمكّن تطبيقك من قراءة الرقم التسلسلي إلا بعد أن يمنح المستخدم التطبيق إذنًا بالوصول إلى جهاز USB أو ملحق.
لمزيد من المعلومات حول التعامل مع أجهزة USB، يمكنك الاطّلاع على الدليل حول طريقة ضبط مضيفات USB.
الكاميرا وإمكانية الاتصال
يسرد هذا القسم التغييرات الخاصة بالبيانات الوصفية للكاميرا وواجهات برمجة التطبيقات المتعلّقة بإمكانية الاتصال.
القيود المفروضة على الوصول إلى تفاصيل الكاميرا والبيانات الوصفية
يغيِّر نظام التشغيل Android 10 نطاق المعلومات التي تعرضها
الطريقة
getCameraCharacteristics()
تلقائيًا. على وجه الخصوص، يجب أن يحصل تطبيقك على إذن
CAMERA
للوصول إلى البيانات الوصفية التي يُحتمل أن تكون خاصة بجهاز ومُضمَّنة في القيمة المعروضة لهذه الطريقة.
للمزيد من المعلومات حول هذه التغييرات، يُرجى الاطّلاع على القسم حول حقول الكاميرا التي تتطلب إذنًا.
القيود المفروضة على تفعيل شبكة Wi-Fi وإيقافها
لا يمكن للتطبيقات التي تستهدف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث تفعيل شبكة Wi-Fi أو إيقافها. تعرض الطريقة
WifiManager.setWifiEnabled()
دائمًا القيمة false
.
إذا أردت مطالبة المستخدمين بتفعيل شبكة Wi-Fi وإيقافها، استخدِم لوحة الإعدادات.
قيود الوصول المباشر إلى شبكات Wi-Fi التي تم إعدادها
لحماية خصوصية المستخدم، يقتصر الضبط اليدوي لقائمة شبكات Wi-Fi على تطبيقات النظام ووحدات التحكّم بسياسة الجهاز. يمكن لوحدة التحكّم بسياسة الجهاز (DPC) أن يكون مالك الجهاز أو مالك الملف الشخصي.
إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، ولم يكن تطبيقًا نظامًا أو وحدة التحكّم بسياسة الجهاز، لن تعرض الطرق التالية بيانات مفيدة:
تعرض الطريقة
getConfiguredNetworks()
دائمًا قائمة فارغة.كل طريقة من طرق تشغيل الشبكة التي تعرض قيمة عدد صحيح—
addNetwork()
وupdateNetwork()
— تعرض دائمًا -1.كل عملية على الشبكة تعرض قيمة منطقية -
removeNetwork()
وreassociate()
وenableNetwork()
وdisableNetwork()
وreconnect()
وdisconnect()
: تعرض دائمًاfalse
.
إذا كان تطبيقك بحاجة إلى الاتصال بشبكات Wi-Fi، استخدِم الطرق البديلة التالية:
- لتشغيل اتصال محلي فوري بشبكة Wi-Fi، استخدِم
WifiNetworkSpecifier
في عنصرNetworkRequest
عادي. - لإضافة شبكات Wi-Fi من أجل توفير إمكانية الوصول إلى الإنترنت للمستخدم، يمكنك العمل باستخدام كائنات
WifiNetworkSuggestion
. يمكنك إضافة وإزالة الشبكات التي تظهر في مربّع حوار اختيار شبكة الاتصال التلقائي من خلال استدعاءaddNetworkSuggestions()
وremoveNetworkSuggestions()
، على التوالي. لا تتطلب هذه الطرق الحصول على أي أذونات لتحديد الموقع الجغرافي.
تتطلّب بعض واجهات برمجة تطبيقات الاتصال الهاتفي والبلوتوث وWi-Fi الحصول على إذن تحديد الموقع الجغرافي الدقيق.
إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، يجب أن يحصل على إذن
ACCESS_FINE_LOCATION
لكي يتمكن من استخدام عدة طُرق ضمن واجهات برمجة تطبيقات Wi-Fi أو Wi-Fi Aware
أو البلوتوث. تسرد الأقسام التالية الفئات والطرق المتأثرة.
التلفونية
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Wi-Fi
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
البلوتوث
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
الأذونات
يوضِّح هذا القسم التعديلات التي تم إجراؤها على نموذج أذونات Android.
تم تقييد الوصول إلى محتوى الشاشة
لحماية محتوى شاشات المستخدمين، يمنع Android 10 الوصول بدون تنبيه إلى محتوى شاشة الجهاز من خلال تغيير نطاق أذونات
READ_FRAME_BUFFER
وCAPTURE_VIDEO_OUTPUT
وCAPTURE_SECURE_VIDEO_OUTPUT
. بدءًا من نظام التشغيل Android 10، تتوفّر هذه الأذونات
للتوقيع
فقط.
يجب أن تستخدم التطبيقات التي تحتاج إلى الوصول إلى محتوى شاشة الجهاز
واجهة برمجة التطبيقات
MediaProjection
،
التي تعرض إشعارًا يطلب من المستخدم تقديم الموافقة.
فحص الأذونات الموجَّهة للمستخدمين في التطبيقات القديمة
إذا كان تطبيقك يستهدف الإصدار 5.1 من نظام التشغيل Android (المستوى 22 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم، ستظهر للمستخدمين شاشة الأذونات عند استخدام تطبيقك على جهاز يعمل بإصدار Android 10 أو الإصدارات الأحدث لأوّل مرة، كما هو موضّح في الشكل 1. وتتيح هذه الشاشة للمستخدمين إبطال إمكانية الوصول إلى الأذونات التي منحها النظام لتطبيقك أثناء التثبيت.
التعرّف على النشاط البدني
يقدّم نظام التشغيل Android 10 إذن التشغيل على
android.permission.ACTIVITY_RECOGNITION
للتطبيقات التي تحتاج إلى رصد عدد خطوات المستخدم أو تصنيف النشاط البدني للمستخدم، مثل المشي أو ركوب الدرّاجة أو الحركة
في مركبة. تم تصميم ذلك لمنح المستخدمين إمكانية الاطّلاع على كيفية استخدام بيانات أداة استشعار الجهاز
في "الإعدادات".
بعض المكتبات ضمن خدمات Google Play، مثل Activity Recognition API وGoogle Fit API، لا تعرض نتائج ما لم يمنح المستخدم هذا الإذن لتطبيقك.
إنّ أجهزة الاستشعار المدمَجة في الجهاز التي تتطلّب منك توضيح هذا الإذن هي عدّاد الخطوات وأجهزة استشعار الخطوات.
إذا كان تطبيقك يستهدف Android 9 (المستوى 28 لواجهة برمجة التطبيقات) أو أقل، يمنح النظام
إذن android.permission.ACTIVITY_RECOGNITION
لتطبيقك تلقائيًا، حسب الحاجة،
في حال استيفاء تطبيقك لكل شرط من الشروط التالية:
- يتضمّن ملف البيان
إذن "
com.google.android.gms.permission.ACTIVITY_RECOGNITION
". - لا يتضمّن ملف البيان
إذن
android.permission.ACTIVITY_RECOGNITION
.
إذا منح النظام التلقائي الإذن android.permission.ACTIVITY_RECOGNITION
، يحتفظ تطبيقك بالإذن بعد تحديث تطبيقك لاستهداف
الإصدار 10 من نظام التشغيل Android. ومع ذلك، يمكن للمستخدم إبطال هذا الإذن في أي وقت
من خلال إعدادات النظام.
تمت إزالة مجموعات الأذونات من واجهة المستخدم
بدءًا من نظام التشغيل Android 10، لا يمكن للتطبيقات البحث عن كيفية تجميع الأذونات في واجهة المستخدم.