التغييرات في الخصوصية في Android 10

يقدّم Android 10 (مستوى واجهة برمجة التطبيقات 29) عددًا من الميزات والتغييرات في السلوك لتحسين حماية خصوصية المستخدمين. توسّع هذه التغييرات نطاق الشفافية والتحكّم اللذَين يمنحهما نظام التشغيل للمستخدمين في ما يتعلّق ببياناتهم والإمكانات التي يمنحونها للتطبيقات. قد تعني هذه الميزات أنّ سلوكًا أو بيانات معيّنة يعتمد عليها تطبيقك قد تتصرف بشكل مختلف مقارنةً بالإصدارات الأقدم من النظام الأساسي. يجب أن تكون التأثيرات على تطبيقك في حدّها الأدنى إذا كان تطبيقك يتّبع أفضل الممارسات الحالية للتعامل مع بيانات المستخدمين.

تعرض هذه الصفحة ملخّصًا لكل تغيير.

أهم التغييرات

يتضمّن هذا القسم التغييرات الرئيسية في Android 10 المتعلّقة بالخصوصية.

وصول محدود إلى مساحة التخزين الخارجية يقتصر على ملفات التطبيق والوسائط

بشكلٍ تلقائي، يتم منح التطبيقات التي تستهدف Android 10 والإصدارات الأحدث وصولًا محدودًا إلى مساحة التخزين الخارجية، أو التخزين الفرعي. يمكن لهذه التطبيقات الاطّلاع على أنواع الملفات التالية ضمن جهاز تخزين خارجي بدون الحاجة إلى طلب أي أذونات من المستخدم متعلقة بمساحة التخزين:

  • الملفات في الدليل الخاص بالتطبيق، والتي يتم الوصول إليها باستخدام getExternalFilesDir()
  • الصور والفيديوهات والمقاطع الصوتية التي أنشأها التطبيق من مكتبة الوسائط.

لمزيد من المعلومات عن التخزين الفرعي وكيفية مشاركة الملفات المحفوظة على أجهزة التخزين الخارجية والوصول إليها وتعديلها، يُرجى الاطّلاع على الأدلة حول كيفية إدارة الملفات في مساحة التخزين الخارجية و الوصول إلى ملفات الوسائط وتعديلها.

يتطلب الوصول إلى الموقع الجغرافي للجهاز في الخلفية إذنًا

لدعم التحكّم الإضافي الذي يملكه المستخدمون في وصول التطبيق إلى معلومات الموقع الجغرافي، يقدّم Android 10 الإذن ACCESS_BACKGROUND_LOCATION.

على عكس الإذنَين ACCESS_FINE_LOCATION و ACCESS_COARSE_LOCATION ، يؤثر الإذن ACCESS_BACKGROUND_LOCATION فقط في وصول التطبيق إلى الموقع الجغرافي عندما يعمل في الخلفية. يُعتبر التطبيق أنّه يصل إلى الموقع الجغرافي في الخلفية ما لم يستوفِ أحد الشروط التالية:

إذا كان تطبيقك ينشئ مناطق جغرافية ويراقبها و يستهدف 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، لا يتتبّع النظام الأساسي معلومات الصلة بجهات الاتصال. نتيجةً لذلك، إذا كان تطبيقك يُجري بحثًا عن جهات اتصال المستخدم، لن يتم ترتيب النتائج حسب مدى تكرار التفاعل.

يتضمّن الدليل حول ContactsProvider ملاحظة تصف الحقول والطرق المحدّدة التي أصبحت قديمة على جميع الأجهزة بدءًا من Android 10.

عنوان MAC العشوائي

على الأجهزة التي تعمل بنظام Android 10 أو إصدار أحدث، ينقل النظام عناوين MAC عشوائية بشكلٍ تلقائي.

إذا كان تطبيقك يعالج حالة استخدام في المؤسسة، يوفّر النظام الأساسي واجهات برمجة تطبيقات لعدة عمليات متعلقة بعناوين MAC:

  • الحصول على عنوان MAC عشوائي: يمكن لتطبيقات مالك الجهاز وتطبيقات مالك الملف الشخصي استرداد عنوان MAC العشوائي المخصّص لشبكة معيّنة من خلال استدعاء getRandomizedMacAddress().
  • الحصول على عنوان MAC الفعلي الخاص بالمصنع: يمكن لتطبيقات مالك الجهاز استرداد عنوان MAC الفعلي للجهاز من خلال استدعاء getWifiMacAddress(). هذه الطريقة مفيدة لتتبُّع أسطول من الأجهزة.

تقييد الوصول إلى نظام الملفات ‎ /proc/net

على الأجهزة التي تعمل بنظام Android 10 أو إصدار أحدث، لا يمكن للتطبيقات الوصول إلى /proc/net، الذي يتضمّن معلومات عن حالة شبكة الجهاز. يجب أن تستخدم التطبيقات التي تحتاج إلى الوصول إلى هذه المعلومات، مثل شبكات VPN، الفئتَين NetworkStatsManager أو ConnectivityManager.

تقييد معرّفات الأجهزة غير القابلة لإعادة الضبط

بدءًا من Android 10، يجب أن يكون لدى التطبيقات الإذن المميّز READ_PRIVILEGED_PHONE_STATE للوصول إلى معرّفات الجهاز غير القابلة لإعادة الضبط، والتي تتضمّن كلاً من IMEI والرقم التسلسلي.

تشمل الطرق المتأثرة ما يلي:

إذا لم يكن لدى تطبيقك الإذن وحاولت طلب معلومات عن المعرّفات غير القابلة لإعادة الضبط على أي حال، يختلف ردّ النظام الأساسي استنادًا إلى إصدار حزمة تطوير البرامج (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. تسرد الأقسام التالية الفئات والطرق المتأثرة.

الاتصالات الهاتفية

Wi-Fi

بلوتوث

الأذونات

يصف هذا القسم التحديثات التي تم إجراؤها على نموذج أذونات Android.

وصول محدود إلى محتويات الشاشة

لحماية محتويات شاشة المستخدمين، يمنع Android 10 الوصول الصامت إلى محتويات شاشة الجهاز من خلال تغيير نطاق الأذونات READ_FRAME_BUFFER وCAPTURE_VIDEO_OUTPUT وCAPTURE_SECURE_VIDEO_OUTPUT. اعتبارًا من Android 10، لا يمكن الوصول إلى هذه الأذونات إلا من خلال التوقيع.

يجب أن تستخدم التطبيقات التي تحتاج إلى الوصول إلى محتويات شاشة الجهاز واجهة برمجة التطبيقات MediaProjection التي تعرض رسالة تطلب من المستخدم تقديم الموافقة.

التحقّق من الأذونات التي يراها المستخدم في التطبيقات القديمة

إذا كان تطبيقك يستهدف Android 5.1 (مستوى واجهة برمجة التطبيقات 22) أو إصدارًا أقدم، يرى المستخدمون شاشة أذونات عند استخدام تطبيقك لأول مرة على جهاز يعمل بنظام Android 10 أو إصدار أحدث، كما هو موضّح في الشكل 1. تمنح هذه الشاشة المستخدمين فرصة إلغاء إذن الوصول إلى الأذونات التي سبق أن منحها النظام لتطبيقك في وقت التثبيت.

لقطة شاشة لمربّع حوار
الشكل 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، لا يمكن للتطبيقات البحث عن كيفية تجميع الأذونات في واجهة المستخدم.