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

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

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

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

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

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

זרימת עבודה

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

  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(...)
   }
}

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

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

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

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

בקשה בהקשר

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

הסבר על הבקשה

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