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

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

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

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

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

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

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

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

ظهور مربّع حوار الإذن

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

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

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

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

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

  1. غيِّر تعريف READ_PHONE_STATE بحيث لا يستخدم تطبيقك الإذن إلا على Android 10 (المستوى 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