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