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

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

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

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

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

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

سير العمل

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

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

شرح الطلب

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