يقدّم Android 10 (مستوى واجهة برمجة التطبيقات 29) عددًا من الميزات والتغييرات في السلوك لتحسين حماية خصوصية المستخدمين. توسّع هذه التغييرات نطاق الشفافية والتحكّم اللذَين يمنحهما نظام التشغيل للمستخدمين في ما يتعلّق ببياناتهم والإمكانات التي يمنحونها للتطبيقات. قد تعني هذه الميزات أنّ سلوكًا أو بيانات معيّنة يعتمد عليها تطبيقك قد تتصرف بشكل مختلف مقارنةً بالإصدارات الأقدم من النظام الأساسي. يجب أن تكون التأثيرات على تطبيقك في حدّها الأدنى إذا كان تطبيقك يتّبع أفضل الممارسات الحالية للتعامل مع بيانات المستخدمين.
تعرض هذه الصفحة ملخّصًا لكل تغيير.
أهم التغييرات
يتضمّن هذا القسم التغييرات الرئيسية في Android 10 المتعلّقة بالخصوصية.
وصول محدود إلى مساحة التخزين الخارجية يقتصر على ملفات التطبيق والوسائط
بشكلٍ تلقائي، يتم منح التطبيقات التي تستهدف Android 10 والإصدارات الأحدث وصولًا محدودًا إلى مساحة التخزين الخارجية، أو التخزين الفرعي. يمكن لهذه التطبيقات الاطّلاع على أنواع الملفات التالية ضمن جهاز تخزين خارجي بدون الحاجة إلى طلب أي أذونات من المستخدم متعلقة بمساحة التخزين:
- الملفات في الدليل الخاص بالتطبيق، والتي يتم الوصول إليها باستخدام
getExternalFilesDir() - الصور والفيديوهات والمقاطع الصوتية التي أنشأها التطبيق من مكتبة الوسائط.
لمزيد من المعلومات عن التخزين الفرعي وكيفية مشاركة الملفات المحفوظة على أجهزة التخزين الخارجية والوصول إليها وتعديلها، يُرجى الاطّلاع على الأدلة حول كيفية إدارة الملفات في مساحة التخزين الخارجية و الوصول إلى ملفات الوسائط وتعديلها.
يتطلب الوصول إلى الموقع الجغرافي للجهاز في الخلفية إذنًا
لدعم التحكّم الإضافي الذي يملكه المستخدمون في وصول التطبيق إلى
معلومات الموقع الجغرافي، يقدّم Android 10 الإذن
ACCESS_BACKGROUND_LOCATION.
على عكس الإذنَين
ACCESS_FINE_LOCATION
و
ACCESS_COARSE_LOCATION
، يؤثر الإذن ACCESS_BACKGROUND_LOCATION فقط في وصول التطبيق إلى الموقع الجغرافي عندما يعمل في الخلفية. يُعتبر التطبيق أنّه يصل إلى الموقع الجغرافي في الخلفية ما لم يستوفِ أحد الشروط التالية:
- ظهور نشاط تابع للتطبيق
تشغيل التطبيق لخدمة تعمل في المقدّمة أعلنت عن نوع خدمة تعمل في المقدّمة هو foreground service type of
locationللإعلان عن نوع الخدمة التي تعمل في المقدّمة في تطبيقك، اضبط
targetSdkVersionأوcompileSdkVersionلتطبيقك على29أو إصدار أحدث. مزيد من المعلومات حول كيفية مواصلة الخدمات التي تعمل في المقدّمة الإجراءات التي بدأها المستخدم والتي تتطلب الوصول إلى الموقع الجغرافي
إذا كان تطبيقك ينشئ مناطق جغرافية ويراقبها و
يستهدف Android 10 (مستوى واجهة برمجة التطبيقات 29) أو إصدارًا أحدث، عليك الإعلان عن الإذن
ACCESS_BACKGROUND_LOCATION
يتم منح الإذن تلقائيًا عند استهداف Android 9 أو إصدار أقدم
إذا كان تطبيقك يعمل على 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) المستهدَف والأذونات المحدّدة، كما هو موضّح في
الجدول التالي:
الجدول 1. التغييرات في حالة إذن تحديد الموقع الجغرافي بعد ترقية الجهاز إلى Android 10
| إصدار المنصة المستهدفة | هل تم منح إذن تحديد الموقع الجغرافي بدقة أو بشكل تقريبي؟ |
هل تم تحديد إذن الوصول إلى الموقع الجغرافي في الخلفية في البيان؟ |
حالة الإذن التلقائية المعدَّلة |
|---|---|---|---|
| Android 10 | نعم | نعم | الوصول إلى البيانات في الخلفية والمقدّمة |
| Android 10 | نعم | لا | وصول التطبيق إلى البيانات أثناء ظهورها على الشاشة فقط |
| Android 10 | لا | (يتجاهله النظام) | بلا إذن وصول |
| Android 9 أو إصدار أقدم | نعم | يضيفه النظام تلقائيًا في وقت ترقية الجهاز | الوصول إلى البيانات في الخلفية والمقدّمة |
| Android 9 أو إصدار أقدم | لا | (يتجاهله النظام) | بلا إذن وصول |
يُرجى العِلم أنّه يمكن للمستخدم تغيير مستوى الوصول هذا حتى بعد أن يحدّث النظام تلقائيًا إذن وصول تطبيقك إلى الموقع الجغرافي للجهاز. على سبيل المثال، قد يقلّل المستخدم إذن وصول تطبيقك إلى المقدّمة فقط أو يلغي الإذن تمامًا. قبل محاولة الوصول إلى الموقع الجغرافي للجهاز، خاصةً ضمن خدمة تعمل في المقدّمة، يجب أن يتحقّق تطبيقك مما إذا كان المستخدم لا يزال يسمح له بتلقّي معلومات الموقع الجغرافي هذه.
يتم إلغاء الإذن عند تحديث مستوى واجهة برمجة التطبيقات المستهدَف على أجهزة Android 10
لنفترض أنّ تطبيقك مثبَّت حاليًا على جهاز يعمل بنظام Android 10. إذا حدّثت تطبيقك لاستهداف Android 10 في هذه الحالة، يلغي الجهاز الإذن ACCESS_BACKGROUND_LOCATION.
القيود المفروضة على بدء الأنشطة من الخلفية
بدءًا من Android 10، يفرض النظام قيودًا على بدء الأنشطة من الخلفية. يساعد هذا التغيير في السلوك على تقليل الانقطاعات للمستخدم ويمنحه المزيد من التحكّم في ما يظهر على شاشته. طالما أنّ تطبيقك يبدأ الأنشطة كنتيجة مباشرة لتفاعل المستخدم، فمن المرجّح أن لا يتأثر بهذه القيود.
المعرّفات والبيانات
يسرد هذا القسم التغييرات الخاصة بالتعامل مع معرّفات الأجهزة والبيانات.
إزالة ميزة "الصلة بجهات الاتصال"
بدءًا من Android 10، لا يتتبّع النظام الأساسي معلومات الصلة بجهات الاتصال. نتيجةً لذلك، إذا كان تطبيقك يُجري بحثًا عن جهات اتصال المستخدم، لن يتم ترتيب النتائج حسب مدى تكرار التفاعل.
عنوان MAC العشوائي
على الأجهزة التي تعمل بنظام Android 10 أو إصدار أحدث، ينقل النظام عناوين MAC عشوائية بشكلٍ تلقائي.
- الحصول على عنوان MAC عشوائي: يمكن لتطبيقات مالك الجهاز وتطبيقات مالك الملف الشخصي
استرداد عنوان MAC العشوائي المخصّص لشبكة معيّنة من خلال
استدعاء
getRandomizedMacAddress(). - الحصول على عنوان MAC الفعلي الخاص بالمصنع: يمكن لتطبيقات مالك الجهاز استرداد
عنوان MAC الفعلي للجهاز من خلال استدعاء
getWifiMacAddress(). هذه الطريقة مفيدة لتتبُّع أسطول من الأجهزة.
تقييد الوصول إلى نظام الملفات /proc/net
على الأجهزة التي تعمل بنظام Android 10 أو إصدار أحدث، لا يمكن للتطبيقات الوصول إلى /proc/net، الذي يتضمّن معلومات عن حالة شبكة الجهاز. يجب أن تستخدم التطبيقات
التي تحتاج إلى الوصول إلى هذه المعلومات، مثل شبكات VPN، الفئتَين
NetworkStatsManager أو
ConnectivityManager.
تقييد معرّفات الأجهزة غير القابلة لإعادة الضبط
بدءًا من Android 10، يجب أن يكون لدى التطبيقات الإذن المميّز READ_PRIVILEGED_PHONE_STATE للوصول إلى معرّفات الجهاز غير القابلة لإعادة الضبط، والتي تتضمّن كلاً من IMEI والرقم التسلسلي.
تشمل الطرق المتأثرة ما يلي:
BuildTelephonyManager
إذا لم يكن لدى تطبيقك الإذن وحاولت طلب معلومات عن المعرّفات غير القابلة لإعادة الضبط على أي حال، يختلف ردّ النظام الأساسي استنادًا إلى إصدار حزمة تطوير البرامج (SDK) المستهدَف:
- إذا كان تطبيقك يستهدف Android 10 أو إصدارًا أحدث، يحدث
SecurityException. - إذا كان تطبيقك يستهدف Android 9 (مستوى واجهة برمجة التطبيقات 28) أو إصدارًا أقدم، تعرض الطريقة
nullأو بيانات عنصر نائب إذا كان لدى التطبيق الإذنREAD_PHONE_STATE. وإلا، يحدثSecurityException.
لا تحتاج العديد من حالات الاستخدام إلى معرّفات الأجهزة غير القابلة لإعادة الضبط. على سبيل المثال، إذا كان تطبيقك يستخدم معرّفات الأجهزة غير القابلة لإعادة الضبط لأغراض تتبُّع الإعلانات أو إحصاءات المستخدمين ، استخدِم معرّفًا إعلانيًا على Android لحالات الاستخدام المحدّدة هذه بدلاً من ذلك. لمزيد من المعلومات، يُرجى الاطّلاع على أفضل الممارسات المتعلّقة بالمعرّفات الفريدة.
وصول محدود إلى بيانات الحافظة
لا يمكن لتطبيقك الوصول إلى بيانات الحافظة على Android 10 أو إصدار أحدث ما لم يكن محرر طريقة الإدخال التلقائي (IME) أو التطبيق الذي يتم التركيز عليه حاليًا.
حماية الرقم التسلسلي لجهاز USB
إذا كان تطبيقك يستهدف Android 10 أو إصدارًا أحدث، لا يمكنه قراءة الرقم التسلسلي إلى أن يمنح المستخدم تطبيقك إذن الوصول إلى جهاز USB أو ملحقه.
لمزيد من المعلومات حول التعامل مع أجهزة USB، يُرجى الاطّلاع على دليل كيفية ضبط مضيفي USB.
الكاميرا والاتصال
يسرد هذا القسم التغييرات الخاصة بالبيانات الوصفية للكاميرا وواجهات برمجة التطبيقات للاتصال.
تقييد الوصول إلى تفاصيل الكاميرا والبيانات الوصفية
يغيّر Android 10 نطاق المعلومات التي تعرضها الطريقة
getCameraCharacteristics()
بشكلٍ تلقائي. على وجه الخصوص، يجب أن يكون لدى تطبيقك الإذن
CAMERA للوصول إلى البيانات الوصفية التي قد تكون خاصة بالجهاز والمضمّنة في القيمة التي تعرضها هذه الطريقة.
لمزيد من المعلومات حول هذه التغييرات، يُرجى الاطّلاع على القسم حول حقول الكاميرا التي تتطلب إذنًا.
تقييد تفعيل شبكة Wi-Fi وإيقافها
لا يمكن للتطبيقات التي تستهدف Android 10 أو إصدارًا أحدث تفعيل شبكة Wi-Fi أو إيقافها. تعرض الطريقة
WifiManager.setWifiEnabled()
دائمًا false.
إذا كنت بحاجة إلى مطالبة المستخدمين بتفعيل شبكة Wi-Fi وإيقافها، استخدِم لوحة إعدادات.
القيود المفروضة على الوصول المباشر إلى شبكات Wi-Fi التي تم ضبطها
لحماية خصوصية المستخدم، يقتصر الضبط اليدوي لقائمة شبكات Wi-Fi على تطبيقات النظام ووحدات التحكّم في سياسات الأجهزة (DPC). يمكن أن تكون وحدة التحكّم في سياسات الأجهزة (DPC) إما مالك الجهاز أو مالك الملف الشخصي.
إذا كان تطبيقك يستهدف Android 10 أو إصدارًا أحدث، ولم يكن تطبيقًا تابعًا للنظام أو وحدة تحكّم في سياسات الأجهزة (DPC)، لن تعرض الطرق التالية بيانات مفيدة:
تعرض الطريقة
getConfiguredNetworks()دائمًا قائمة فارغة.تعرض كل طريقة من طرق عمليات الشبكة التي تعرض قيمة عدد صحيح ، مثل
addNetwork()وupdateNetwork()، دائمًا -1.تعرض كل عملية من عمليات الشبكة التي تعرض قيمة منطقية ، مثل
removeNetwork()وreassociate()وenableNetwork()وdisableNetwork()وreconnect()و وdisconnect()، دائمًاfalse.
إذا كان تطبيقك بحاجة إلى الاتصال بشبكات Wi-Fi، استخدِم الطرق البديلة التالية:
- لتفعيل اتصال محلي فوري بشبكة Wi-Fi، استخدِم
WifiNetworkSpecifierفي عنصر عاديNetworkRequest. - لإضافة شبكات Wi-Fi ليأخذها النظام في الاعتبار لتوفير إمكانية الوصول إلى الإنترنت للمستخدم، استخدِم عناصر
WifiNetworkSuggestion. يمكنك إضافة الشبكات التي تظهر في مربّع حوار اختيار الشبكة للاتصال التلقائي وإزالتها من خلال استدعاءaddNetworkSuggestions()وremoveNetworkSuggestions()على التوالي. لا تتطلب هذه الطرق أي أذونات متعلقة بالموقع الجغرافي.
تتطلب بعض واجهات برمجة التطبيقات للاتصالات الهاتفية والبلوتوث وWi-Fi إذن تحديد الموقع الجغرافي بدقة
إذا كان تطبيقك يستهدف Android 10 أو إصدارًا أحدث، يجب أن يكون لديه الـ
ACCESS_FINE_LOCATION
إذن لاستخدام عدة طرق ضمن واجهات برمجة تطبيقات Wi-Fi أو Wi-Fi Aware أو
Bluetooth. تسرد الأقسام التالية الفئات والطرق المتأثرة.
الاتصالات الهاتفية
TelephonyManagergetCellLocation()getAllCellInfo()requestNetworkScan()requestCellInfoUpdate()getAvailableNetworks()getServiceState()
TelephonyScanManagerrequestNetworkScan()
TelephonyScanManager.NetworkScanCallbackonResults()
PhoneStateListeneronCellLocationChanged()onCellInfoChanged()onServiceStateChanged()
Wi-Fi
WifiManagerstartScan()getScanResults()getConnectionInfo()getConfiguredNetworks()
WifiAwareManagerWifiP2pManagerWifiRttManager
بلوتوث
BluetoothAdapterstartDiscovery()startLeScan()
BluetoothAdapter.LeScanCallbackBluetoothLeScannerstartScan()
الأذونات
يصف هذا القسم التحديثات التي تم إجراؤها على نموذج أذونات Android.
وصول محدود إلى محتويات الشاشة
لحماية محتويات شاشة المستخدمين، يمنع Android 10 الوصول الصامت إلى محتويات شاشة الجهاز من خلال تغيير نطاق الأذونات READ_FRAME_BUFFER وCAPTURE_VIDEO_OUTPUT وCAPTURE_SECURE_VIDEO_OUTPUT. اعتبارًا من Android 10، لا يمكن الوصول إلى هذه الأذونات إلا من خلال
التوقيع.
يجب أن تستخدم التطبيقات التي تحتاج إلى الوصول إلى محتويات شاشة الجهاز واجهة برمجة التطبيقات
MediaProjection
التي تعرض رسالة تطلب من المستخدم تقديم الموافقة.
التحقّق من الأذونات التي يراها المستخدم في التطبيقات القديمة
إذا كان تطبيقك يستهدف Android 5.1 (مستوى واجهة برمجة التطبيقات 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، يحتفظ تطبيقك بالإذن بعد تحديثه لاستهداف Android 10. ومع ذلك، يمكن للمستخدم إلغاء هذا الإذن في أي وقت من خلال إعدادات النظام.
تمت إزالة مجموعات الأذونات من واجهة المستخدم
اعتبارًا من Android 10، لا يمكن للتطبيقات البحث عن كيفية تجميع الأذونات في واجهة المستخدم.