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