הרשאה מיוחדת שמטרתה להגן על הגישה למשאבי מערכת שמומלץ להשתמש בהם רגיש או שאינו קשור ישירות לפרטיות המשתמש. ההרשאות האלה שונה משעת ההתקנה הרשאות וזמן ריצה .
דוגמאות להרשאות מיוחדות:
- תזמון התראות מדויקות.
- הצגה והצגה מעל אפליקציות אחרות.
- גישה לכל נתוני האחסון.
אפליקציות עם הצהרה על הרשאה מיוחדת מוצגות בקטע גישה מיוחדת בהגדרות המערכת (איור 1). כדי להעניק הרשאה מיוחדת לאפליקציה, המשתמש צריך לנווט לדף הזה: הגדרות > אפליקציות > גישה מיוחדת לאפליקציה.
זרימת עבודה
כדי לבקש הרשאה מיוחדת, מבצעים את הפעולות הבאות:
- בקובץ המניפסט של האפליקציה, צריך להצהיר על הרשאות שהאפליקציה עשויה להזדקק להם בקשה.
- צריך לעצב את חוויית המשתמש באפליקציה כך שפעולות ספציפיות באפליקציה ישויכו עם הרשאות מיוחדות ספציפיות. אפשר ליידע את המשתמשים אילו פעולות עשויות להיות לדרוש ממנו להעניק לאפליקציה שלך הרשאת גישה לנתוני משתמש פרטיים.
- ממתינים להפעלת המשתמש המשימה או הפעולה באפליקציה שמצריכות גישה למשתמש פרטי ספציפי . בשלב הזה, האפליקציה שלך יכולה לבקש את ההרשאה המיוחדת - שנדרשת לצורך גישה לנתונים האלה.
- לבדוק אם המשתמש כבר העניק את ההרשאה המיוחדת נדרש. כדי לעשות זאת, צריך להשתמש בבדיקה מותאמת אישית של כל הרשאה . אם תינתן הרשאה, האפליקציה תוכל לגשת למשתמש הפרטי . אם לא, המשיכו לשלב הבא. הערה: צריך לבדוק אם לקבל הרשאה בכל פעם שמבצעים פעולה שמחייבת הרשאה.
- להציג נימוק למשתמש ברכיב בממשק המשתמש שברור מוסבר לאילו נתונים האפליקציה מנסה לגשת ולאילו יתרונות האפליקציה יכול לספק למשתמש אם הוא העניק הרשאה מיוחדת. In addition, מכיוון שהאפליקציה שולחת את המשתמשים להגדרות המערכת כדי להעניק את ההרשאה, גם לכלול הוראות קצרות שמסבירות איך המשתמשים יכולים להעניק את ההרשאה שם. ממשק המשתמש של הנימוקים צריך לספק למשתמש אפשרות ברורה ויסרב להעניק את ההרשאה. אחרי שהמשתמש מאשר את את הנימוק שלכם, ממשיכים לשלב הבא.
- מבקשים את ההרשאה המיוחדת שהאפליקציה צריכה כדי לגשת אליה את הנתונים הפרטיים של המשתמש. סביר להניח שהדבר כרוך בכוונה בהגדרות המערכת, שבו המשתמש יכול להעניק את ההרשאה. ביטול הלייק הרשאות זמן ריצה, יש אין תיבת דו-שיח עם הרשאה קופצת.
- לבדוק את תגובת המשתמש – אם הוא בחר לאשר או לדחות את הבקשה המיוחדת
הרשאה – בשיטה
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(...)
}
}
שיטות מומלצות וטיפים
בקטעים הבאים מפורטים כמה שיטות מומלצות ושיקולים, שמבקשות הרשאות מיוחדות.
לכל הרשאה יש שיטת בדיקה משלה
ההרשאות המיוחדות פועלות בצורה שונה מסביבת זמן הריצה
הרשאות. במקום זאת,
לעיין בחומר העזר בנושא הרשאות API
דף ומשתמשים בבדיקת הגישה המותאמת אישית
הפונקציות לכל הרשאה מיוחדת. לדוגמה:
AlarmManager#canScheduleExactAlarms()
עבור
SCHEDULE_EXACT_ALARMS
הרשאה וגם
Environment#isExternalStorageManager()
עבור
MANAGE_EXTERNAL_STORAGE
הרשאה.
בקשה בהקשר
בדומה להרשאות בתחילת ההפעלה, אפליקציות צריכות לבקש הרשאות מיוחדות
בהקשר, כשהמשתמש מבקש פעולה ספציפית המחייבת
הרשאה. לדוגמה, צריך להמתין כדי לבקש את ההרשאה SCHEDULE_EXACT_ALARMS
עד שהמשתמש מתזמנ שליחה של אימייל במועד ספציפי.
הסבר על הבקשה
צריך לספק נימוק לפני ההפניה האוטומטית להגדרות המערכת. מאחר שמשתמשים יוצאים אפליקציה באופן זמני כדי להעניק הרשאות מיוחדות, להציג ממשק משתמש בתוך האפליקציה לפני להפעיל את Intent לדף Special App Access (גישה מיוחדת לאפליקציה) בהגדרות המערכת. ממשק המשתמש הזה צריך להסביר בבירור למה האפליקציה זקוקה להרשאה, ואיך המשתמש צריך להעניק אותו בדף ההגדרות.