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

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

איור 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 עד שהמשתמש מתזמן שליחת אימייל בשעה ספציפית.

הסבר על הבקשה

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