تعديلات الأذونات في Android 11

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

أذونات لمرة واحدة

بدءًا من نظام التشغيل Android 11، عندما يطلب تطبيقك إذنًا متعلّقًا بالموقع الجغرافي أو الميكروفون أو الكاميرا، سيحتوي مربّع حوار الأذونات المعروض للمستخدمين على خيار باسم هذه المرة فقط. إذا اختار المستخدِم هذا الخيار في مربّع الحوار، سيتم منح تطبيقك إذنًا مؤقتًا لمرة واحدة.

مزيد من المعلومات حول كيفية تعامل النظام مع الأذونات التي تُمنح لمرة واحدة

إعادة ضبط الأذونات تلقائيًا من التطبيقات غير المستخدَمة

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

مزيد من المعلومات حول كيفية إعادة ضبط أذونات التطبيقات غير المستخدَمة تلقائيًا

إمكانية ظهور مربّع حوار الأذونات

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

لتحديد ما إذا تم رفض أذونات تطبيق بشكل دائم (لأغراض تصحيح الأخطاء والاختبار)، استخدِم الأمر التالي:

adb shell dumpsys package PACKAGE_NAME

حيث يمثّل PACKAGE_NAME اسم الحزمة المطلوب فحصها.

يحتوي ناتج الأمر على أقسام تبدو على النحو التالي:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

يضع USER_SET علامة على الأذونات التي رفضها المستخدم مرة واحدة. يتم وضع علامة USER_FIXED على الأذونات التي تم رفضها نهائيًا من خلال النقر على رفض مرتين.

أثناء الاختبار، قد تحتاج إلى إعادة ضبط هذه العلامات للتأكّد من أنّ المختبِرين لن يتفاجأوا بعدم ظهور مربّع حوار الطلب. لإجراء ذلك، استخدِم الأمر:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

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

تعرَّف على مزيد من المعلومات حول كيفية التعامل مع رفض الأذونات في تطبيقك.

تغييرات على نافذة تنبيه النظام

يُجري نظام التشغيل Android 11 عدة تغييرات على طريقة منح التطبيقات إذن SYSTEM_ALERT_WINDOW. تهدف هذه التغييرات إلى حماية المستخدمين من خلال جعل عملية منح الإذن أكثر تعمُّدًا.

يتم منح بعض التطبيقات تلقائيًا إذن SYSTEM_ALERT_WINDOW عند الطلب

يتم تلقائيًا منح فئات معيّنة من التطبيقات إذن SYSTEM_ALERT_WINDOW عند الطلب:

  • ويُمنح تلقائيًا أي تطبيق يتضمّن ROLE_CALL_SCREENING ويطلب SYSTEM_ALERT_WINDOW الإذن. إذا فقد التطبيق ROLE_CALL_SCREENING، سيفقد الإذن.

  • يتم تلقائيًا منح أي تطبيق يلتقط صورًا للشاشة من خلال MediaProjection ويطلب SYSTEM_ALERT_WINDOW، ما لم يرفض المستخدم منح التطبيق الإذن بشكل صريح. وعندما يتوقف التطبيق عن التقاط صور للشاشة، يفقد الإذن. حالة الاستخدام هذه مخصّصة بشكل أساسي لتطبيقات البث المباشر للألعاب.

لا تحتاج هذه التطبيقات إلى إرسال ACTION_MANAGE_OVERLAY_PERMISSION للحصول على إذن SYSTEM_ALERT_WINDOW، بل يمكنها ببساطة طلب SYSTEM_ALERT_WINDOW مباشرةً.

تؤدي طلبات MANAGE_OVERLAY_PERMISSION دائمًا إلى نقل المستخدم إلى شاشة أذونات النظام

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

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

أرقام الهواتف

يغيّر نظام التشغيل Android 11 إذن الوصول إلى معلومات الهاتف الذي يستخدمه تطبيقك عند قراءة أرقام الهواتف.

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

إذا كان تطبيقك يعرِّف READ_PHONE_STATE لاستدعاء طرق أخرى غير تلك الواردة في القائمة السابقة، يمكنك مواصلة طلب READ_PHONE_STATE على جميع إصدارات Android. إذا كنت تستخدم إذن READ_PHONE_STATE فقط للطُرق الواردة في القائمة السابقة، عليك تعديل ملف البيان على النحو التالي:

  1. غيِّر بيان READ_PHONE_STATE لكي يستخدم تطبيقك الإذن فقط على الإصدار 10 من نظام التشغيل Android (المستوى 29 لواجهة برمجة التطبيقات) والإصدارات الأقدم.
  2. أضِف الإذن READ_PHONE_NUMBERS.

يوضّح مقتطف تعريف البيان التالي هذه العملية:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

مراجع إضافية

لمزيد من المعلومات حول التغييرات التي طرأت على الأذونات في Android 11، يُرجى الاطّلاع على المواد التالية:

الفيديوهات

التطوير باستخدام آخر التغييرات المتعلّقة بالخصوصية في Android 11