מערכת 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
.
הרשאות שנדחו באופן סופי על ידי בחירה באפשרות Deny פעמיים יסומנו על ידי 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
ישירות.
Intents של MANAGE_OVERLAY_permission תמיד מביאים את המשתמש למסך הרשאות המערכת
החל מ-Android 11, הכוונה של ACTION_MANAGE_OVERLAY_PERMISSION
תמיד מעבירה את המשתמש למסך Settings (הגדרות) ברמה העליונה, שבו המשתמש יכול להעניק או לבטל הרשאות
SYSTEM_ALERT_WINDOW
לאפליקציות. המערכת מתעלמת מכל הנתונים של package:
ב-Intent.
בגרסאות קודמות של Android, ה-Intent ACTION_MANAGE_OVERLAY_PERMISSION
יכול היה לציין חבילה, שתוביל את המשתמש למסך ספציפי לאפליקציה לצורך ניהול ההרשאה. הפונקציונליות הזו לא נתמכת החל מ-Android 11. במקום זאת, המשתמש צריך לבחור קודם את האפליקציה שעבורה הוא רוצה להעניק או לבטל את ההרשאה. השינוי הזה נועד להגן על המשתמשים על ידי הענקת ההרשאה באופן מכוון יותר.
מספרי טלפון
ב-Android 11 יש שינוי בהרשאה שקשורה לטלפון שבה האפליקציה משתמשת כשקוראת מספרי טלפון.
אם האפליקציה שלכם מטרגטת את Android 11 ואילך ואתם צריכים גישה לממשקי ה-API של מספרי הטלפון שמופיעים ברשימה הבאה, עליכם לבקש את ההרשאה READ_PHONE_NUMBERS
במקום את ההרשאה READ_PHONE_STATE
.
- ה-method
getLine1Number()
גם במחלקהTelephonyManager
וגם במחלקהTelecomManager
. - רכיב ה-method
getMsisdn()
שלא נתמך במחלקהTelephonyManager
.
אם האפליקציה שלכם מצהירה על READ_PHONE_STATE
לשימוש בשיטות קריאה שונות מאלה שצוינו ברשימה הקודמת, תוכלו להמשיך לבקש את READ_PHONE_STATE
בכל הגרסאות של Android. עם זאת, אם אתם משתמשים בהרשאה READ_PHONE_STATE
רק לשיטות שברשימה הקודמת, עליכם לעדכן את קובץ המניפסט באופן הבא:
- צריך לשנות את ההצהרה לגבי
READ_PHONE_STATE
כך שהאפליקציה תשתמש בהרשאה רק ב-Android 10 (רמת API 29) ומטה. - מוסיפים את ההרשאה
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