يقدّم نظام التشغيل 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
أو إصدار أحدث. يمكنك الاطّلاع على مزيد من المعلومات حول كيفية مواصلة الخدمات التي تعمل في المقدّمة للإجراءات التي بدأها المستخدم والتي تتطلّب الوصول إلى بيانات الموقع الجغرافي.
إذا كان تطبيقك ينشئ مناطق جغرافية افتراضية ويراقبها ويستهدف الإصدار 10 من نظام التشغيل Android (المستوى 29 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، عليك الإشارة صراحةً إلى طلب حصوله على الإذن ACCESS_BACKGROUND_LOCATION
.
يتم منح الإذن بالوصول تلقائيًا عند استهداف الإصدار Android 9 أو الإصدارات الأقدم
إذا كان تطبيقك يعمل على الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث ولكنه يستهدف الإصدار 9 من نظام التشغيل Android (المستوى 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 | لا | (يتجاهله النظام) | بلا إذن وصول |
الإصدار 9 من نظام التشغيل Android أو الإصدارات الأقدم | نعم | تتم إضافته تلقائيًا من قِبل النظام عند ترقية الجهاز | الوصول إلى البيانات أثناء ظهورها على الشاشة وفي الخلفية |
الإصدار 9 من نظام التشغيل Android أو الإصدارات الأقدم | لا | (يتجاهله النظام) | بلا إذن وصول |
يُرجى العِلم أنّه يمكن للمستخدم تغيير مستوى الوصول هذا حتى بعد أن يحدِّث النظام تلقائيًا إذن الوصول إلى بيانات الموقع الجغرافي للجهاز في تطبيقك. على سبيل المثال، قد يقلّل المستخدم إذن وصول تطبيقك إلى الموقع الجغرافي ليقتصر على المقدّمة فقط أو قد يبطله تمامًا. قبل محاولة الوصول إلى الموقع الجغرافي للجهاز، خاصةً ضمن خدمة تعمل في المقدّمة، يجب أن يتحقّق تطبيقك ممّا إذا كان المستخدم لا يزال يسمح لتطبيقك بتلقّي معلومات الموقع الجغرافي هذه.
تم إبطال إذن الوصول عند تعديل مستوى واجهة برمجة التطبيقات المستهدَف على أجهزة Android 10
لنفترض أنّ تطبيقك مثبَّت مسبقًا على جهاز يعمل بنظام التشغيل Android 10. إذا حدّثت تطبيقك لاستهداف Android 10 في هذه الحالة، سيبطِل الجهاز إذن ACCESS_BACKGROUND_LOCATION
.
لمزيد من المعلومات حول كيفية استرداد الموقع الجغرافي للجهاز أثناء تشغيل تطبيقك في الخلفية، يمكنك الاطّلاع على الدليل حول تلقّي تحديثات دورية للموقع الجغرافي.
قيود على بدء الأنشطة من الخلفية
بدءًا من نظام التشغيل Android 10، يفرض النظام قيودًا على بدء الأنشطة من الخلفية. يساعد هذا التغيير في السلوك على تقليل أوقات الانقطاع للمستخدم، كما يتيح له التحكّم بشكل أكبر في ما يظهر على الشاشة. ما دام تطبيقك يبدأ الأنشطة كنتيجة مباشرة لتفاعل المستخدم، من المرجّح ألا يتأثر تطبيقك بهذه القيود.
لمزيد من المعلومات حول البديل المقترَح لبدء الأنشطة من الخلفية، يُرجى الاطّلاع على الدليل حول كيفية تنبيه المستخدمين بشأن الأحداث الحساسة للوقت في تطبيقك.
المعرّفات والبيانات
يسرد هذا القسم التغييرات المتعلّقة بالتعامل مع معرّفات الأجهزة وبياناتها.
إزالة ميزة "جهات الاتصال المفضّلة"
بدءًا من نظام التشغيل Android 10، لا تحتفظ المنصة بمعلومات حول مدى تفاعلك مع جهات الاتصال. نتيجةً لذلك، إذا كان تطبيقك يجري بحثًا في جهات اتصال المستخدم، لن يتم ترتيب النتائج حسب معدّل التفاعل.
يتضمّن الدليل حول ContactsProvider
إشعارًا يصف الحقول والطرق المحدّدة التي أصبحت قديمة على جميع الأجهزة التي تعمل بنظام التشغيل Android 10 والإصدارات الأحدث.
اختيار عنوان MAC بشكل عشوائي
على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android أو إصدار أحدث، يرسل النظام عناوين MAC عشوائية تلقائيًا.
إذا كان تطبيقك يتعامل مع حالة استخدام خاصة بالمؤسسات، توفّر المنصة واجهات برمجة تطبيقات للعديد من العمليات ذات الصلة بعناوين MAC:
- الحصول على عنوان MAC عشوائي: يمكن لتطبيقات مالك الجهاز وتطبيقات مالك الملف الشخصي استرداد عنوان MAC العشوائي الذي تم تعيينه لشبكة معيّنة من خلال طلب
getRandomizedMacAddress()
. - الحصول على عنوان MAC الأصلي: يمكن لتطبيقات مالك الجهاز استرداد عنوان MAC الأصلي للجهاز من خلال طلب
getWifiMacAddress()
. وتكون هذه الطريقة مفيدة لتتبُّع مجموعات الأجهزة.
تقييد الوصول إلى نظام الملفات /proc/net
على الأجهزة التي تعمل بنظام التشغيل Android 10 أو الإصدارات الأحدث، لا يمكن للتطبيقات الوصول إلى /proc/net
، الذي يتضمّن معلومات حول حالة شبكة الجهاز. يجب أن تستخدم التطبيقات التي تحتاج إلى الوصول إلى هذه المعلومات، مثل شبكات VPN، الفئة NetworkStatsManager
أو ConnectivityManager
.
قيود على معرّفات الأجهزة غير القابلة لإعادة الضبط
بدءًا من نظام التشغيل Android 10، يجب أن تحصل التطبيقات على
READ_PRIVILEGED_PHONE_STATE
إذن مميّز للوصول إلى
المعرّفات غير القابلة لإعادة الضبط على الجهاز، والتي تشمل كلاً من رقم IMEI والرقم التسلسلي.
تشمل الطرق المتأثرة ما يلي:
Build
TelephonyManager
إذا لم يكن تطبيقك يملك الإذن وحاولت طلب معلومات حول المعرّفات غير القابلة لإعادة الضبط، سيختلف ردّ النظام الأساسي استنادًا إلى إصدار حزمة SDK المستهدَف:
- إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، سيحدث
SecurityException
. - إذا كان تطبيقك يستهدف الإصدار Android 9 (المستوى 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). يمكن أن يكون تطبيق 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، أصبحت هذه الأذونات
signature-access
فقط.
يجب أن تستخدم التطبيقات التي تحتاج إلى الوصول إلى محتوى شاشة الجهاز واجهة برمجة التطبيقات
MediaProjection
التي تعرض طلبًا يطلب من المستخدم تقديم موافقته.
التحقّق من الأذونات التي تظهر للمستخدمين في التطبيقات القديمة
إذا كان تطبيقك يستهدف الإصدار 5.1 من نظام التشغيل Android (المستوى 22 من واجهة برمجة التطبيقات) أو إصدارًا أقدم، ستظهر للمستخدمين شاشة أذونات عند استخدام تطبيقك لأول مرة على جهاز يعمل بالإصدار 10 من نظام التشغيل Android أو إصدار أحدث، كما هو موضّح في الشكل 1. تمنح هذه الشاشة المستخدمين فرصة إبطال الأذونات التي سبق أن منحها النظام لتطبيقك عند تثبيته.
التعرّف على النشاط البدني
يقدّم نظام التشغيل Android 10
إذن
android.permission.ACTIVITY_RECOGNITION
وقت التشغيل للتطبيقات التي تحتاج إلى رصد عدد خطوات المستخدم أو تصنيف نشاطه البدني، مثل المشي أو ركوب الدراجة أو التنقّل في مركبة. تم تصميم هذه الميزة لمنح المستخدمين إمكانية الاطّلاع على كيفية استخدام بيانات مستشعر الجهاز في "الإعدادات".
لا تقدّم بعض المكتبات ضِمن "خدمات Google Play"، مثل Activity Recognition API وGoogle Fit API، نتائج ما لم يمنح المستخدم تطبيقك هذا الإذن.
أجهزة الاستشعار المضمّنة الوحيدة على الجهاز التي تتطلّب منك الإفصاح عن هذا الإذن هي أجهزة استشعار عداد الخطوات وكاشف الخطوات.
إذا كان تطبيقك يستهدف الإصدار 9 من نظام التشغيل Android (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، يمنح النظام تلقائيًا تطبيقك الإذن android.permission.ACTIVITY_RECOGNITION
حسب الحاجة، إذا استوفى تطبيقك كل الشروط التالية:
- يتضمّن ملف البيان الإذن
com.google.android.gms.permission.ACTIVITY_RECOGNITION
. - لا يتضمّن ملف البيان الإذن
android.permission.ACTIVITY_RECOGNITION
.
إذا منح النظام الإذن android.permission.ACTIVITY_RECOGNITION
تلقائيًا، سيحتفظ تطبيقك بالإذن بعد تحديثه لاستهداف Android 10. ومع ذلك، يمكن للمستخدم إلغاء هذا الإذن في أي وقت من خلال إعدادات النظام.
إزالة مجموعات الأذونات من واجهة المستخدم
اعتبارًا من نظام التشغيل Android 10، لا يمكن للتطبيقات البحث عن كيفية تجميع الأذونات في واجهة المستخدم.