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

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

الشكل 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" إلى أن يحدّد المستخدم موعدًا لإرسال رسالة إلكترونية في وقت محدّد.

شرح الطلب

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