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

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

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

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

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

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

Workflow

لطلب إذن خاص، عليك إجراء ما يلي:

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

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

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

شرح الطلب

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