طلب أذونات خاصة

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

الشكل 1. شاشة أذونات خاصة للتطبيقات في إعدادات النظام

تشمل بعض الأمثلة على الأذونات الخاصة ما يلي:

  • جدولة المنبّهات المحدَّدة الوقت
  • عرض المحتوى والرسم فوق التطبيقات الأخرى
  • الوصول إلى جميع بيانات مساحة التخزين

تظهر التطبيقات التي تحدّد إذنًا خاصًا في صفحة أذونات خاصة للتطبيقات في إعدادات النظام (الشكل 1). لمنح التطبيق إذنًا خاصًا، على المستخدم الانتقال إلى هذه الصفحة: الإعدادات > التطبيقات > أذونات خاصة للتطبيقات.

سير العمل

لطلب إذن خاص، اتّبِع الخطوات التالية:

  1. في ملف البيان الخاص بتطبيقك، حدِّد الأذونات الخاصة التي قد يحتاج تطبيقك إلى طلبها.
  2. صمِّم تجربة المستخدم في تطبيقك بحيث تكون الإجراءات المحدّدة في تطبيقك مرتبطة بأذونات خاصة محدّدة. أوضِح للمستخدمين الإجراءات التي قد تتطلّب منهم منح تطبيقك الإذن بالوصول إلى بيانات المستخدمين الخاصة.
  3. انتظِر حتى يطلب المستخدم تنفيذ المهمة أو الإجراء في تطبيقك الذي يتطلّب الوصول إلى بيانات مستخدم خاصة محدّدة. في ذلك الوقت، يمكن لتطبيقك طلب الإذن الخاص اللازم للوصول إلى تلك البيانات.
  4. تحقَّق مما إذا كان المستخدم قد منح الإذن الخاص الذي يتطلبه تطبيقك. لإجراء ذلك، استخدِم وظيفة التحقّق المخصّصة لكل إذن. وفي حال منح الإذن، يمكن لتطبيقك الوصول إلى بيانات المستخدم الخاصة. وإذا استمرت المشكلة، فانتقِل إلى الخطوة التالية. ملاحظة: يجب التحقّق مما إذا كان لديك الإذن في كل مرة تنفّذ فيها عملية تتطلّب هذا الإذن.
  5. قدِّم للمستخدم سببًا في عنصر واجهة مستخدم يوضّح بوضوح البيانات التي يحاول تطبيقك الوصول إليها والمزايا التي يمكن أن يقدّمها التطبيق للمستخدم إذا منح الإذن الخاص. بالإضافة إلى ذلك، بما أنّ تطبيقك يوجّه المستخدمين إلى إعدادات النظام لمنح الإذن، يجب أيضًا تضمين تعليمات موجزة توضّح كيفية منح المستخدمين الإذن هناك. يجب أن توفّر واجهة مستخدم السبب خيارًا واضحًا للمستخدم لإيقاف منح الإذن. بعد أن يقرّ المستخدم بالسبب، انتقِل إلى الخطوة التالية.
  6. اطلب الإذن الخاص الذي يحتاج إليه تطبيقك للوصول إلى بيانات المستخدم الخاصة. من المحتمل أن يتضمّن ذلك نية الانتقال إلى الصفحة ذات الصلة في إعدادات النظام حيث يمكن للمستخدم منح الإذن. وعلى عكس أذونات وقت التشغيل، لا يتوفّر مربّع حوار منبثق خاص بالأذونات.
  7. تحقَّق من ردّ المستخدم، أي ما إذا اختار منح الإذن الخاص أو رفضه، في طريقة onResume().
  8. إذا منح المستخدم الإذن لتطبيقك، يمكنك الوصول إلى بيانات المستخدم الخاصة. إذا رفض المستخدم الإذن بدلاً من ذلك، عليك خفض إصدار تطبيقك على نحو ملائم لكي يوفّر للمستخدم وظائف بدون المعلومات المحمية بموجب هذا الإذن.
الشكل 2. سير العمل الخاص بتعريف الأذونات الخاصة وطلبها على Android

طلب أذونات خاصة

وعلى عكس أذونات وقت التشغيل، يجب أن يمنح المستخدم أذونات خاصة من صفحة أذونات خاصة للتطبيقات في إعدادات النظام. ويمكن للتطبيقات توجيه المستخدمين إلى هناك باستخدام Intent، ما يؤدي إلى إيقاف التطبيق مؤقتًا وفتح صفحة الإعدادات المقابلة لإذن خاص معيّن. بعد أن يعود المستخدم إلى التطبيق، يمكن للتطبيق التحقّق مما إذا تم منح الإذن في الدالة onResume().

يوضّح نموذج الرمز البرمجي التالي كيفية طلب الإذن الخاص SCHEDULE_EXACT_ALARMS من المستخدمين:

val alarmManager = getSystemService<AlarmManager>()!!
when {
   // if permission is granted, proceed with scheduling exact alarms…
   alarmManager.canScheduleExactAlarms() -> {
       alarmManager.setExact(...)
   }
   else -> {
       // ask users to grant the permission in the corresponding settings page
       startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
   }
}

نموذج الرمز البرمجي للتحقّق من الإذن والتعامل مع قرارات المستخدم في onResume():

override fun onResume() {
   // ...

   if (alarmManager.canScheduleExactAlarms()) {
       // proceed with the action (setting exact alarms)
       alarmManager.setExact(...)
   }
   else {
       // permission not yet approved. Display user notice and gracefully degrade
       your app experience.
       alarmManager.setWindow(...)
   }
}

أفضل الممارسات والنصائح

تقدّم الأقسام التالية بعض أفضل الممارسات والاعتبارات عند طلب أذونات خاصة.

لكل إذن طريقة التحقّق الخاصة به

تختلف الأذونات الخاصة عن أذونات وقت التشغيل. بدلاً من ذلك، يُرجى الرجوع إلى صفحة مرجع واجهة برمجة التطبيقات الخاصة بالأذونات واستخدام دوال التحقّق من إذن الوصول المخصّص لكل إذن خاص. وتشمل الأمثلة AlarmManager#canScheduleExactAlarms() لإذن SCHEDULE_EXACT_ALARMS وEnvironment#isExternalStorageManager() لإذن MANAGE_EXTERNAL_STORAGE.

الطلب ضمن السياق

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

شرح الطلب

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