يقدّم نظام التشغيل 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 أو الإصدارات الأقدم.
إذا كان تطبيقك يعمل بنظام التشغيل Android 10 أو إصدار أحدث ولكنه يستهدف الإصدار 9 من نظام التشغيل Android (المستوى 28 لواجهة برمجة التطبيقات) أو إصدارًا أقدم، يطبّق النظام الأساسي السلوك التالي:
- إذا كان تطبيقك يعلن عن عنصر
<uses-permission>
لكل منACCESS_FINE_LOCATION
أوACCESS_COARSE_LOCATION
، يضيف النظام تلقائيًا عنصر<uses-permission>
لملف APKACCESS_BACKGROUND_LOCATION
أثناء التثبيت. - إذا طلب تطبيقك
ACCESS_FINE_LOCATION
أوACCESS_COARSE_LOCATION
، يضيف النظام تلقائيًاACCESS_BACKGROUND_LOCATION
إلى الطلب.
الوصول إلى الجهاز عند ترقيته إلى Android 10
إذا منح المستخدم تطبيقك إذن الوصول إلى الموقع الجغرافي للجهاز، سواءً كان
ACCESS_COARSE_LOCATION
أو
ACCESS_FINE_LOCATION
، ثمّ أجرى ترقية لجهازه من Android 9 إلى Android 10،
سيُعدّل النظام تلقائيًا مجموعة الأذونات المستندة إلى الموقع الجغرافي الممنوحة
لتطبيقك. وتعتمد مجموعة الأذونات التي يحصل عليها تطبيقك بعد الترقية
على إصدار حزمة تطوير البرامج (SDK) المستهدَف وأذوناته المحدّدة، كما هو موضّح في
الجدول التالي:
إصدار النظام الأساسي المستهدَف | هل تم منح الإذن بالوصول إلى البيانات الدقيقة أو الإجمالية؟ |
هل تم تحديد إذن الوصول إلى البيانات في الخلفية في البيان؟ |
حالة الإذن التلقائي المعدَّلة |
---|---|---|---|
Android 10 | نعم | نعم | الوصول إلى البيانات أثناء ظهورها على الشاشة وفي الخلفية |
Android 10 | نعم | لا | الوصول إلى البيانات أثناء ظهورها على الشاشة فقط |
Android 10 | لا | (يتجاهلها النظام) | بلا إذن وصول |
الإصدار 9 من Android أو الإصدارات الأقدم | نعم | تتم إضافتها تلقائيًا من قِبل النظام في وقت ترقية الجهاز. | الوصول إلى البيانات أثناء ظهورها على الشاشة وفي الخلفية |
الإصدار 9 من Android أو الإصدارات الأقدم | لا | (يتجاهلها النظام) | بلا إذن وصول |
يُرجى العِلم أنّه يمكن للمستخدم تغيير مستوى الوصول هذا حتى بعد أن يُعدِّل النظام تلقائيًا إذن وصول تطبيقك إلى الموقع الجغرافي للجهاز. على سبيل المثال، قد يقلل العميل من إذن وصول تطبيقك إلى المقدّمة فقط أو يُبطل إذن الوصول بالكامل. قبل محاولة الوصول إلى الموقع الجغرافي للجهاز، خاصةً في خدمة تعمل في المقدّمة، يجب أن يتحقّق تطبيقك مما إذا كان المستخدم لا يزال يسمح لتطبيقك بتلقّي معلومات الموقع الجغرافي هذه.
إبطال إذن الوصول عند تعديل مستوى واجهة برمجة التطبيقات المستهدَف على أجهزة Android 10
لنفترض أنّ تطبيقك مثبَّت على جهاز يعمل بنظام التشغيل
Android 10. إذا كنت قد عدّلت تطبيقك لاستهداف الإصدار
Android 10 في هذه الحالة، سيُلغي الجهاز إذن
ACCESS_BACKGROUND_LOCATION
.
لمزيد من المعلومات حول كيفية استرداد الموقع الجغرافي للجهاز عندما يكون تطبيقك في الخلفية، اطّلِع على الدليل حول تلقّي التعديلات الدورية على الموقع الجغرافي.
القيود المفروضة على بدء الأنشطة من الخلفية
بدءًا من الإصدار 10 من نظام Android، يفرض النظام قيودًا على بدء الأنشطة من الخلفية. يساعد هذا التغير في السلوك على تقليل الانقطاعات التي يواجهها المستخدم ويمنحه مزيدًا من التحكّم في ما يظهر على الشاشة. طالما أنّ تطبيقك يبدأ الأنشطة نتيجة مباشرة للتفاعل مع المستخدم، من المرجّح ألا يتأثّر تطبيقك بهذه القيود.
للاطّلاع على مزيد من المعلومات حول البديل المقترَح لبدء الأنشطة من الخلفية، يمكنك الاطّلاع على الدليل حول كيفية تنبيه المستخدمين بشأن الأحداث التي تعتمد على الوقت في تطبيقك.
المعرّفات والبيانات
يسرد هذا القسم التغييرات المتعلّقة بالعمل مع معرّفات الأجهزة وبياناتها.
إزالة التشابه بين جهات الاتصال
بدءًا من الإصدار 10 من Android، لا تتتبّع المنصة معلومات التقارب مع جهات الاتصال. نتيجةً لذلك، إذا أجرى تطبيقك عملية بحث في جهات اتصال المستخدم، لن يتم ترتيب النتائج حسب معدّل التفاعل.
يحتوي الدليل حول ContactsProvider
على إشعار يصف الحقول والطُرق التي أصبحت
قديمة على جميع الأجهزة
بدءًا من Android 10.
اختيار عنوان MAC بشكل عشوائي
على الأجهزة التي تعمل بالإصدار 10 من نظام Android أو إصدار أحدث، يُرسِل النظام عنوان MAC المتسلسل بشكل تلقائي.
إذا كان تطبيقك يعالج حالة استخدام في المؤسسة، توفّر المنصة واجهة برمجة تطبيقات لعدة عمليات مرتبطة بعناوين MAC:
- الحصول على عنوان MAC عشوائي: يمكن لتطبيقات مالك الجهاز وتطبيقات مالك الملف الشخصي retrieving استرداد عنوان MAC العشوائي الذي تم تخصيصه لشبكة معيّنة من خلال
الاتصال
getRandomizedMacAddress()
. - الحصول على عنوان MAC الأصلي: يمكن لتطبيقات مالك الجهاز استرداد عنوان MAC للجهاز الفعلي من خلال الاتصال بـ
getWifiMacAddress()
. وتكون هذه الطريقة مفيدة لتتبُّع أسطول من الأجهزة.
قيود على الوصول إلى نظام الملفات /proc/net
على الأجهزة التي تعمل بنظام التشغيل Android 10 أو إصدار أحدث، لا يمكن للتطبيقات الوصول إلى
/proc/net
، الذي يتضمّن معلومات عن حالة شبكة الجهاز. على التطبيقات التي تحتاج إلى الوصول إلى هذه المعلومات، مثل شبكات VPN، استخدام فئة
NetworkStatsManager
أو
ConnectivityManager
.
القيود المفروضة على معرّفات الأجهزة غير القابلة لإعادة الضبط
بدءًا من الإصدار 10 من نظام التشغيل Android، يجب أن تحصل التطبيقات على
READ_PRIVILEGED_PHONE_STATE
الإذن المميّز للوصول إلى
المعرّفات غير القابلة لإعادة الضبط الخاصة بالجهاز، والتي تشمل رقم IMEI والرقم التسلسلي.
تشمل الطرق المتأثرة ما يلي:
Build
TelephonyManager
إذا لم يكن تطبيقك يملك الإذن وحاولت طلب معلومات عن المعرِّفات غير القابلة لإعادة الضبط على أي حال، يختلف ردّ المنصة استنادًا إلى إصدار حزمة SDK المستهدَف:
- إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو إصدارًا أحدث، يحدث
SecurityException
. - إذا كان تطبيقك يستهدف الإصدار 9 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات) أو إصدارًا أقدم، ستُرجع الطريقة الرمز
null
أو بيانات العنصر النائب إذا كان التطبيق يملك الإذنREAD_PHONE_STATE
. بخلاف ذلك، يحدثSecurityException
.
لا تحتاج العديد من حالات الاستخدام إلى معرّفات أجهزة لا يمكن إعادة ضبطها. على سبيل المثال، إذا كان تطبيقك يستخدم معرّفات أجهزة لا يمكن إعادة ضبطها لأغراض تتبُّع الإعلانات أو تحليلات المستخدِمين، استخدِم معرّفًا إعلانيًا على Android لحالات الاستخدام المحدّدة هذه بدلاً من ذلك. لمزيد من المعلومات، اطّلِع على أفضل الممارسات المتعلّقة بالمعرِّفات الفريدة.
وصول محدود إلى بيانات الحافظة
لا يمكن لتطبيقك الوصول إلى بيانات الحافظة على الإصدار 10 من Android أو إصدارٍ أحدث ما لم يكن هو محرر طريقة الإدخال (IME) التلقائي أو التطبيق الذي يتم التركيز عليه حاليًا.
حماية الرقم التسلسلي لجهاز USB
إذا كان تطبيقك يستهدف الإصدار Android 10 أو إصدارًا أحدث، لا يمكن لتطبيقك قراءة الرقم التسلسلي إلى أن يمنح المستخدم تطبيقك الإذن بالوصول إلى جهاز 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()
، على التوالي. ولا تتطلّب هذه الطرق أي أذونات لتحديد الموقع الجغرافي.
تتطلّب بعض واجهات برمجة التطبيقات (API) الخاصة بخدمات الهاتف والبلوتوث وWi-Fi الحصول على إذن تحديد الموقع الجغرافي بدقة.
إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو إصدارًا أحدث، يجب أن يكون لديه إذن
ACCESS_FINE_LOCATION
لاستخدام عدة طرق ضمن واجهات برمجة التطبيقات Wi-Fi أو Wi-Fi Aware
أو Bluetooth. تعرِض الأقسام التالية الفئات والطُرق المتأثّرة.
الاتصالات الهاتفية
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
. اعتبارًا من الإصدار 10 من Android، تتضمّن هذه الأذونات
إذن الوصول إلى التوقيع
فقط.
يجب أن تستخدم التطبيقات التي تحتاج إلى الوصول إلى محتوى شاشة الجهاز واجهة برمجة التطبيقات
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، لا يمكن للتطبيقات البحث عن كيفية grouped تجميع الأذونات في واجهة المستخدم.