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

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

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

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

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

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

Workflow

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

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

شرح الطلب

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