التغييرات في الخصوصية في 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 من نظام التشغيل 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

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

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

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

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

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

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

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

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

إذا لم يكن تطبيقك يملك الإذن وحاولت طلب معلومات عن المعرّفات غير القابلة لإعادة الضبط، ستختلف استجابة النظام الأساسي بناءً على إصدار حزمة SDK المستهدَف:

  • إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، فسيحدث SecurityException.
  • إذا كان تطبيقك يستهدف الإصدار 9 من نظام التشغيل Android (المستوى 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 أو الإصدارات الأحدث، ولم يكن تطبيق نظام أو وحدة تحكّم بسياسة الجهاز (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 إذن تحديد الموقع الجغرافي الدقيق

إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث، يجب أن يتضمّن الإذن ACCESS_FINE_LOCATION لكي يتمكّن من استخدام عدة طرق ضمن واجهات برمجة التطبيقات الخاصة بشبكة Wi-Fi أو Wi-Fi Aware أو البلوتوث. توضّح الأقسام التالية الفئات والطُرق المتأثّرة.

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

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، نتائج ما لم يمنح المستخدم تطبيقك هذا الإذن.

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

إذا كان تطبيقك يستهدف الإصدار 9 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 28) أو الإصدارات الأقدم، سيمنح النظام تلقائيًا إذن android.permission.ACTIVITY_RECOGNITION لتطبيقك، حسب الحاجة، إذا كان تطبيقك يستوفي كل شرط من الشروط التالية:

  • يتضمّن ملف البيان الإذن com.google.android.gms.permission.ACTIVITY_RECOGNITION.
  • لا يتضمّن ملف البيان الإذن android.permission.ACTIVITY_RECOGNITION.

إذا منح النظام تلقائيًا إذن android.permission.ACTIVITY_RECOGNITION، سيحتفظ تطبيقك بالإذن بعد تحديثه لاستهداف الإصدار 10 من نظام التشغيل Android. ومع ذلك، يمكن للمستخدم إبطال هذا الإذن في أي وقت من خلال إعدادات النظام.

تمت إزالة مجموعات الأذونات من واجهة المستخدم

اعتبارًا من الإصدار Android 10، لا يمكن للتطبيقات البحث عن كيفية تجميع الأذونات في واجهة المستخدم.