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

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

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

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

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

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

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

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

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

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

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

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

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

يتم منح الإذن بالوصول تلقائيًا عند استهداف أجهزة Android 9 أو الإصدارات الأقدم.

إذا كان تطبيقك يعمل على الإصدار 10 من نظام التشغيل Android أو إصدار أحدث ولكنه يستهدف الإصدار 9 (المستوى 28 لواجهة برمجة التطبيقات) أو إصدارًا أقدم، يطبّق النظام الأساسي السلوك التالي:

  • إذا كان تطبيقك يعلن عن عنصر <uses-permission> لكل من ACCESS_FINE_LOCATION أو ACCESS_COARSE_LOCATION، يضيف النظام تلقائيًا عنصر <uses-permission> لملف APK 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

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

يُرجى العِلم أنّه يمكن للمستخدم تغيير مستوى الوصول هذا حتى بعد أن يُعدِّل النظام تلقائيًا إذن وصول تطبيقك إلى الموقع الجغرافي للجهاز. على سبيل المثال، قد يقلل المستخدم من إمكانية وصول تطبيقك إلى المقدّمة فقط أو يُبطله تمامًا. قبل محاولة الوصول إلى الموقع الجغرافي للجهاز، خاصةً في خدمة تعمل في المقدّمة، يجب أن يتحقّق تطبيقك مما إذا كان المستخدم لا يزال يسمح لتطبيقك بتلقّي معلومات الموقع الجغرافي هذه.

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

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

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

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

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

القيود المفروضة على الوصول المباشر إلى شبكات 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. تعرِض الأقسام التالية الفئات والطُرق المتأثّرة.

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

Wi-Fi

البلوتوث

الأذونات

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

تم حظر الوصول إلى محتوى الشاشة

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

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

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

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

لقطة شاشة لمربّع الحوار
الشكل 1. مربّع حوار موجّه للمستخدمين يتيح مراجعة التصاريح القديمة

التعرّف على النشاط البدني

يوفّر Android 10 إذن تشغيل android.permission.ACTIVITY_RECOGNITION للتطبيقات التي تحتاج إلى رصد عدد خطوات المستخدم أو تصنيف نشاطه البدني، مثل المشي أو ركوب الدرّاجة أو التحرّك في مركبة. صُمِّمت هذه الميزة لمنح المستخدمين إمكانية الاطّلاع على طريقة استخدام بيانات أداة استشعار الجهاز في "الإعدادات".

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