בקשה להרשאות מיוחדות

הרשאה מיוחדת מגנה על הגישה למשאבי מערכת רגישים במיוחד או כאלה שלא קשורים ישירות לפרטיות המשתמש. הרשאות כאלה שונות מהרשאות שניתנות בזמן ההתקנה או בתחילת ההפעלה.

איור 1. המסך אפליקציות עם הרשאות גישה מיוחדות בהגדרות המערכת.

דוגמאות להרשאות מיוחדות:

  • תזמון התראות מדויקות.
  • הצגה וציור מעל אפליקציות אחרות.
  • גישה לכל נתוני האחסון.

אפליקציות שמצהירות על הרשאה מיוחדת מוצגות בדף אפליקציות עם הרשאות גישה מיוחדות בהגדרות המערכת (איור 1). כדי להעניק לאפליקציה הרשאה מיוחדת, המשתמש צריך לעבור לדף הזה: הגדרות > אפליקציות > אפליקציות עם הרשאות גישה מיוחדות.

תהליך עבודה

כדי לבקש הרשאה מיוחדת:

  1. בקובץ המניפסט של האפליקציה, מצהירים על ההרשאות המיוחדות שהאפליקציה עשויה לבקש.
  2. מעצבים את חוויית השימוש באפליקציה כך שפעולות ספציפיות ישויכו להרשאות מיוחדות ספציפיות. חשוב להודיע למשתמשים אילו פעולות עשויות לדרוש שהם ייתנו לאפליקציה הרשאת גישה לנתונים פרטיים.
  3. מחכים שהמשתמש יפעיל את המשימה או הפעולה באפליקציה שדורשת גישה לנתונים פרטיים ספציפיים. בשלב הזה, האפליקציה יכולה לבקש הרשאה מיוחדת לגשת לנתונים האלה.
  4. בודקים אם המשתמש כבר נתן לאפליקציה את ההרשאה המיוחדת דורשת. כדי לעשות זאת, משתמשים בפונקציית הבדיקה המותאמת אישית של כל הרשאה. אם ההרשאה כבר ניתנה, האפליקציה יכולה לגשת לנתוני המשתמש הפרטיים. אם היא לא ניתנה, עוברים לשלב הבא. הערה: בכל פעם שמבצעים פעולה שנדרשת לה הרשאה, צריך לבדוק אם ההרשאה הזו כבר ניתנה.
  5. מציגים נימוק ברכיב של ממשק המשתמש. צריך להסביר בצורה ברורה לאילו נתונים האפליקציה מנסה לגשת, ואילו יתרונות היא יכולה לתתת למשתמש אם הוא יעניק לה את ההרשאה המיוחדת. בנוסף, מכיוון שהאפליקציה מפנה את המשתמשים להגדרות המערכת כדי להעניק את ההרשאה, צריך לכלול גם הסבר קצר למשתמשים איך לעשות זאת. הנימוק צריך לכלול אפשרות ברורה לבטל את ההסכמה למתן ההרשאה. אחרי שהמשתמש מאשר שהוא הבין את הנימוק, ממשיכים לשלב הבא.
  6. מבקשים את ההרשאה המיוחדת שהאפליקציה צריכה כדי לגשת לנתונים הפרטיים של המשתמש. בדרך כלל מדובר בכוונה לעבור לדף המתאים בהגדרות המערכת, שבו המשתמש יכול להעניק את ההרשאה. בניגוד להרשאות בתחילת ההפעלה, לא מוצגת תיבת דו-שיח קופצת לבקשת הרשאה.
  7. בודקים את התשובה של המשתמש – אם הוא בחר להעניק או לדחות את ההרשאה המיוחדת – בשיטה onResume().
  8. אם המשתמש העניק הרשאה לאפליקציה, היא תוכל לגשת לנתונים הפרטיים שלו. אם המשתמש דחה את ההרשאה, צריך לבצע הפחתה חיננית (graceful degradation) של חוויית השימוש באפליקציה ולשמור על הפונקציונליות שלא תלויה בנתונים שאין גישה אליהם.
איור 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(...)
   }
}

שיטות מומלצות וטיפים

בקטעים הבאים מפורטות כמה שיטות מומלצות ושיקולים שכדאי לקחת בחשבון כשמבקשים הרשאות מיוחדות.

לכל הרשאה יש שיטת בדיקה משלה

הרשאות מיוחדות פועלות באופן שונה מהרשאות בתחילת ההפעלה. צריך לעיין בדף הפניית ה-API של ההרשאות ולהשתמש בפונקציות בדיקה מותאמות כדי לברר אם ההרשאה המיוחדת ניתנה. לדוגמה, AlarmManager#canScheduleExactAlarms() להרשאה SCHEDULE_EXACT_ALARMS ו-Environment#isExternalStorageManager() להרשאה MANAGE_EXTERNAL_STORAGE

בקשה בהקשר הרלוונטי

בדומה להרשאות בתחילת ההפעלה, אפליקציות צריכות לבקש הרשאות מיוחדות בהקשר המתאים, כשהמשתמש מבקש לבצע פעולה ספציפית שנדרשת לה הרשאה. לדוגמה, כדאי להמתין עם בקשת ההרשאה SCHEDULE_EXACT_ALARMS עד שהמשתמש יתזמן שליחת אימייל לשעה ספציפית.

הסבר על הבקשה

צריך לספק הסבר לפני שמפנים להגדרות המערכת. המשתמשים יוצאים מהאפליקציה באופן זמני כדי להעניק הרשאות מיוחדות. לכן צריך להציג רכיב של הסבר בתוך האפליקציה לפני שמפעילים את הכוונה לעבור לדף אפליקציות עם הרשאות גישה מיוחדות בהגדרות המערכת. הרכיב הזה צריך להסביר באופן ברור למה האפליקציה צריכה את ההרשאה ואיך צריך להעניק אותה בדף ההגדרות.