עדכונים בנושא הרשאות ב-Android {7/}11

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

הרשאות חד-פעמיות

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

מידע נוסף על אופן הטיפול של המערכת בהרשאות חד-פעמיות

איפוס אוטומטי של הרשאות שניתנו לאפליקציות שלא היו בשימוש כבר הרבה זמן

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

מידע נוסף על איפוס אוטומטי של הרשאות של אפליקציות שלא נעשה בהן שימוש

הצגת תיבת דו-שיח עם הרשאה

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

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

adb shell dumpsys package PACKAGE_NAME

כאשר PACKAGE_NAME הוא שם החבילה שרוצים לבדוק.

הפלט של הפקודה מכיל קטעים שנראים כך:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

הרשאות שהמשתמש דחה פעם אחת מסומנות בסימן USER_SET. אם בוחרים באפשרות דחייה פעמיים, ההרשאות נדחות באופן סופי ומסומנות על ידי USER_FIXED.

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

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME הוא שם ההרשאה שרוצים לאפס. כדי לראות רשימה מלאה של הרשאות שניתנות לאפליקציה ל-Android, אפשר לעבור אל דף ההפניה של API ההרשאות.

מידע נוסף על טיפול בדחיית הרשאות באפליקציה

שינויים בחלון התראת המערכת

ב-Android 11 בוצעו כמה שינויים באופן שבו ניתנת לאפליקציות ההרשאה SYSTEM_ALERT_WINDOW. השינויים האלה נועדו להגן על המשתמשים על ידי הפיכת מתן ההרשאה למכוון יותר.

אפליקציות מסוימות מקבלות אוטומטית את ההרשאה SYSTEM_ALERT_WINDOW כשמבקשים אותה

אפליקציות מסוימות מקבלות באופן אוטומטי את ההרשאה SYSTEM_ALERT_WINDOW כשמבקשים אותה:

  • כל אפליקציה שיש לה ROLE_CALL_SCREENING ומבקשת SYSTEM_ALERT_WINDOW מקבלת את ההרשאה באופן אוטומטי. אם האפליקציה מאבדת את ROLE_CALL_SCREENING, היא מאבדת את ההרשאה.

  • כל אפליקציה שמצלמת את המסך באמצעות MediaProjection ושולחת בקשה להרשאה SYSTEM_ALERT_WINDOW מקבלת את ההרשאה באופן אוטומטי, אלא אם המשתמש דחה במפורש את בקשת ההרשאה של האפליקציה. כשהאפליקציה מפסיקה לצלם את המסך, ההרשאה מבוטלת. תרחיש השימוש הזה מיועד בעיקר לאפליקציות לשידור חי של משחקים.

האפליקציות האלה לא צריכות לשלוח ACTION_MANAGE_OVERLAY_PERMISSION כדי לקבל את ההרשאה SYSTEM_ALERT_WINDOW. הן יכולות פשוט לבקש את SYSTEM_ALERT_WINDOW ישירות.

הכוונה (intent) של MANAGE_OVERLAY_PERMISSION תמיד מובילה את המשתמש למסך הרשאות המערכת

החל מ-Android 11, ‫ACTION_MANAGE_OVERLAY_PERMISSION הכוונות תמיד מובילות את המשתמש למסך ההגדרות ברמה העליונה, שבו המשתמש יכול לתת או לבטל את ההרשאות של SYSTEM_ALERT_WINDOW לאפליקציות. המערכת מתעלמת מכל נתוני package: ב-Intent.

בגרסאות קודמות של Android, אפשר היה לציין חבילה ב-intent‏ ACTION_MANAGE_OVERLAY_PERMISSION, וכך להעביר את המשתמש למסך ספציפי לאפליקציה לניהול ההרשאה. הפונקציונליות הזו לא נתמכת החל מ-Android 11. במקום זאת, המשתמש צריך קודם לבחור את האפליקציה שהוא רוצה לתת לה הרשאה או לבטל את ההרשאה שלה. השינוי הזה נועד להגן על המשתמשים על ידי כך שהענקת ההרשאה תהיה מכוונת יותר.

מספרי טלפון

ב-Android 11 יש שינוי בהרשאה שקשורה לטלפון, שבה האפליקציה משתמשת כשהיא קוראת מספרי טלפון.

אם האפליקציה מטרגטת ל-Android 11 ואילך וצריכה לגשת לממשקי ה-API של מספר הטלפון שמוצגים ברשימה הבאה, צריך לבקש את ההרשאה READ_PHONE_NUMBERS במקום את ההרשאה READ_PHONE_STATE.

אם האפליקציה שלכם מצהירה על READ_PHONE_STATE כדי לקרוא לשיטות אחרות מאלה שברשימה הקודמת, תוכלו להמשיך לשלוח בקשות ל-READ_PHONE_STATE בכל גרסאות Android. אם אתם משתמשים בהרשאה READ_PHONE_STATE רק עבור השיטות ברשימה הקודמת, אתם צריכים לעדכן את קובץ המניפסט באופן הבא:

  1. משנים את ההצהרה על READ_PHONE_STATE כך שהאפליקציה תשתמש בהרשאה רק ב-Android 10 (רמת API‏ 29) ובגרסאות קודמות.
  2. מוסיפים את ההרשאה READ_PHONE_NUMBERS.

קטע ההצהרה הבא בקובץ המניפסט מדגים את התהליך הזה:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

מקורות מידע נוספים

למידע נוסף על השינויים בהרשאות ב-Android 11, אפשר לעיין בחומרים הבאים:

סרטונים

פיתוח עם השינויים האחרונים בנושא פרטיות ב-Android 11