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

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

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

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

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

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

זרימת עבודה

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

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

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

בניגוד להרשאות זמן ריצה, המשתמש צריך להעניק הרשאות מיוחדות מהדף גישה מיוחדת לאפליקציה בהגדרות המערכת. אפליקציות יכולות לשלוח לשם משתמשים באמצעות כוונה, שגורמת להשהיית האפליקציה ולהפעלת דף ההגדרות המתאים להרשאה מיוחדת מסוימת. אחרי שהמשתמש חוזר לאפליקציה, האפליקציה יכולה לבדוק אם ההרשאה ניתנה בפונקציה 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 עד שהמשתמש יתזמן שליחת אימייל לשעה ספציפית.

הסבר על הבקשה

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