עדכונים בנושא הרשאות ב-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 ישירות.

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

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

בגרסאות קודמות של 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