يقدّم 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
على الأجهزة التي تعمل بنظام التشغيل 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 والرقم التسلسلي.
تشمل الطرق المتأثرة ما يلي:
BuildTelephonyManager
إذا لم يكن تطبيقك يملك الإذن وحاولت طلب معلومات عن المعرّفات غير القابلة لإعادة الضبط، ستختلف استجابة النظام الأساسي بناءً على إصدار حزمة 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
أو البلوتوث. توضّح الأقسام التالية الفئات والطُرق المتأثّرة.
الاتصالات الهاتفية
TelephonyManagergetCellLocation()getAllCellInfo()requestNetworkScan()requestCellInfoUpdate()getAvailableNetworks()getServiceState()
TelephonyScanManagerrequestNetworkScan()
TelephonyScanManager.NetworkScanCallbackonResults()
PhoneStateListeneronCellLocationChanged()onCellInfoChanged()onServiceStateChanged()
Wi-Fi
WifiManagerstartScan()getScanResults()getConnectionInfo()getConfiguredNetworks()
WifiAwareManagerWifiP2pManagerWifiRttManager
بلوتوث
BluetoothAdapterstartDiscovery()startLeScan()
BluetoothAdapter.LeScanCallbackBluetoothLeScannerstartScan()
الأذونات
يصف هذا القسم التعديلات التي تم إجراؤها على نموذج أذونات Android.
الوصول المحدود إلى محتوى الشاشة
لحماية محتوى شاشة المستخدمين، يمنع Android 10 الوصول الصامت إلى محتوى شاشة الجهاز من خلال تغيير نطاق أذونات READ_FRAME_BUFFER وCAPTURE_VIDEO_OUTPUT وCAPTURE_SECURE_VIDEO_OUTPUT. اعتبارًا من الإصدار Android 10، أصبحت هذه الأذونات مخصّصة
للوصول إلى التوقيع
فقط.
على التطبيقات التي تحتاج إلى الوصول إلى محتوى شاشة الجهاز استخدام واجهة برمجة التطبيقات
MediaProjection
التي تعرض رسالة تطلب من المستخدم تقديم موافقته.
التحقّق من الأذونات الموجّهة للمستخدمين في التطبيقات القديمة
إذا كان تطبيقك يستهدف الإصدار 5.1 من نظام التشغيل Android (المستوى 22 لواجهة برمجة التطبيقات) أو إصدارًا أقدم، ستظهر للمستخدمين شاشة الأذونات عند استخدام تطبيقك على جهاز يعمل بالإصدار 10 من نظام التشغيل Android أو إصدار أحدث لأول مرة، كما هو موضّح في الشكل 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، لا يمكن للتطبيقات البحث عن كيفية تجميع الأذونات في واجهة المستخدم.