הרשאות בתחילת ההפעלה

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

  • הרשאות בזמן ההתקנה

    ( Android 5.1 ומטה ) משתמשים מעניקים הרשאות מסוכנות לאפליקציה כשהם מתקינים או מעדכנים את האפליקציה. יצרני וספקי התקנים יכולים להתקין מראש אפליקציות עם הרשאות מוענקות מראש מבלי להודיע ​​למשתמש.

  • הרשאות זמן ריצה

    ( אנדרואיד 6.0 - 9 ) משתמשים מעניקים הרשאות מסוכנות לאפליקציה כשהאפליקציה פועלת. מתי מתבקשות הרשאות (כגון כאשר האפליקציה מופעלת או כאשר המשתמש ניגש לתכונה מסוימת) תלוי באפליקציה, אך המשתמש מעניק/שולל גישה לאפליקציה לקבוצות הרשאות ספציפיות. יצרני ציוד מקורי/ספקים יכולים להתקין מראש אפליקציות, אבל לא יכולים להעניק הרשאות מראש אלא אם כן הם עוברים את תהליך החריגה. (ראה יצירת חריגים .)

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

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

הרשאות מושפעות

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

adb shell pm list permissions -g -d

אנדרואיד 6.0 ומעלה לא משנה את ההתנהגות של הרשאות רגילות . כל אלו הן הרשאות לא מסוכנות כולל הרשאות רגילות, מערכת וחתימות. הרשאות רגילות הן הרשאות בסיכון נמוך יותר (כגון SET_WALLPAPER ) המעניקות ליישומים המבקשים גישה לתכונות מבודדות ברמת האפליקציה עם סיכון מינימלי ליישומים אחרים, למערכת או למשתמש. כמו במהדורות אנדרואיד 5.1 ומטה, המערכת מעניקה באופן אוטומטי הרשאות רגילות לאפליקציה המבקשת בעת ההתקנה ואינה מבקשת מהמשתמש אישור. לפרטים על הרשאות, עיין בתיעוד הרכיב <permission> .

הגבלות קשות ורכות באנדרואיד 10

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

  • ( הגבלות קשות ) לא ניתן להעניק לאפליקציות הרשאות שאינן ברשימת ההיתרים.
  • ( הגבלות רכות ) אפליקציות ללא רישום היתר מתנהגות בהתאם להרשאה הספציפית שהן מבקשות. ההתנהגות מתוארת בתיעוד הציבורי לאישור המבוקש.

בעת התקנת אפליקציה, המתקין (כגון חנות Google Play) עשוי לבחור לא לרשום את ההרשאות המוגבלות עבור האפליקציה. ההרשאות מוגבלות על ידי הפלטפורמה וניתנות להענקה רק אם אפליקציה עומדת בקריטריונים מיוחדים לפי מדיניות הפלטפורמה. דוגמאות לסוגי הרשאות מוגבלות כוללות הרשאות SMS ויומן שיחות.

רישום ההרשאות מתרחש במהלך ההתקנה ומתי

  • אפליקציה כבר מותקנת במהלך שדרוג אנדרואיד 9 ל-10.
  • הרשאה ניתנת מראש או אפליקציה מותקנת מראש.
  • נדרשת הרשאה לתפקיד שכבר הוגדר לרשימת ההרשאה.
  • המתקין (כגון חנות Google Play) מסמן את ההרשאה כרשומה.

משתמשים לא יכולים ידנית הרשאות לרשימת ההיתרים.

דרישות

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

  • מודל הרשאת זמן הריצה חייב להיות עקבי בכל המכשירים שבהם פועל Android 6.0 ואילך. זה נאכף על ידי מבחני Android Compatibility Test Suite (CTS).
  • אפליקציות חייבות לבקש מהמשתמשים להעניק הרשאות לאפליקציה בזמן ריצה. לפרטים, ראה עדכון יישומים . חריגים מוגבלים עשויים להינתן ליישומי ברירת מחדל ולמטפלים המספקים פונקציונליות בסיסית של המכשיר הבסיסית לפעולה הצפויה של המכשיר. (לדוגמה, לאפליקציית חייגן המוגדרת כברירת מחדל של המכשיר לטיפול ב- ACTION_CALL עשויה להיות גישה להרשאת טלפון.) לפרטים, ראה יצירת חריגים .
  • אפליקציות שנטענו מראש בעלות הרשאות מסוכנות חייבות למקד לרמת API 23 ולשמור על מודל הרשאת זמן הריצה. כלומר, זרימת ה-UI במהלך התקנת האפליקציה לא תסטה מהטמעת AOSP של PermissionController, משתמשים יכולים לבטל הרשאות מסוכנות של אפליקציות מותקנות מראש וכן הלאה.
  • יישומים ללא ראש חייבים להשתמש בפעילות כדי לבקש הרשאות או כדי לשתף UID עם אפליקציה אחרת שיש לה את ההרשאות הדרושות. לפרטים, ראה יישומים ללא ראש .

העברת הרשאות

ההרשאות שניתנו ליישומים ב-Android 5.x נשארות ניתנות לאחר עדכון ל-Android 6.0 ומעלה, אך משתמשים יכולים לבטל את ההרשאות הללו בכל עת.

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

שילוב

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

עדכון יישומים

יישומים בתמונת המערכת ויישומים שהותקנו מראש אינם הרשאות מוענקות אוטומטית מראש. אנו ממליצים לך לעבוד עם מפתחי אפליקציות מותקנים מראש (OEM, ספק וצד שלישי) כדי לבצע את השינויים הנדרשים באפליקציה באמצעות הנחיות למפתחים . באופן ספציפי, עליך לוודא שיישומים שהותקנו מראש ישתנו כדי למנוע קריסות ובעיות אחרות כאשר משתמשים מבטלים הרשאות.

יישומים טעונים מראש

ב-Android 9 ומטה, אפליקציות טעונות מראש המשתמשות בהרשאות מסוכנות חייבות למקד לרמת API 23 ומעלה, ולשמור על מודל ההרשאות של Android 6.0 ומעלה AOSP. לדוגמה, זרימת ממשק המשתמש במהלך התקנת אפליקציה אינה חייבת לסטות מהטמעת AOSP של PermissionController . משתמשים יכולים אפילו לבטל את ההרשאות המסוכנות של אפליקציות מותקנות מראש.

באנדרואיד 6.0 עד 9, חלק מההרשאות ניתנות במהלך זרימת ההתקנה. עם זאת, החל מ-10, זרימת ההתקנה (המבוצעת על ידי אפליקציית Package Installer ) היא פונקציה נפרדת מהענקת הרשאות (באפליקציית Permission Controller ).

יישומים ללא ראש

רק פעילויות יכולות לבקש הרשאות. שירותים לא יכולים לבקש הרשאות ישירות.

  • באנדרואיד 5.1 ואילך, אפליקציות ללא ראש יכולות לבקש הרשאות כשהן מותקנות, או אם הן הותקנו מראש ללא שימוש בפעילות.
  • באנדרואיד 6.0 ואילך, יישומים ללא ראש חייבים להשתמש באחת מהשיטות הבאות כדי לבקש הרשאות:
    • הוסף פעילות כדי לבקש הרשאות. (זו השיטה המועדפת.)
    • שתף UID עם יישום אחר שיש לו את ההרשאות הדרושות. השתמש בשיטה זו רק כאשר אתה זקוק לפלטפורמה כדי לטפל במספר חבילות APK כיישום יחיד.

המטרה היא להימנע מבלבול של משתמשים עם בקשות הרשאה המופיעות מחוץ להקשר.

התאמה אישית של ממשק המשתמש של PackageInstaller

אם תרצה, תוכל להתאים אישית את ערכת הנושא של ממשק המשתמש של הרשאות על ידי עדכון ערכות נושא ברירת המחדל של המכשיר ( Theme.DeviceDefault.Settings ו- Theme.DeviceDefault.Light.Dialog.NoActionBar ) המשמשים את PackageInstaller. עם זאת, מכיוון שעקביות היא קריטית עבור מפתחי אפליקציות, אינך יכול להתאים אישית את המיקום, המיקום והכללים של מועד הופעת ממשק המשתמש ההרשאות.

כדי לכלול מחרוזות עבור שפות נוספות, תרום את המחרוזות ל-AOSP.

יצירת חריגים

אתה יכול להעניק הרשאות מראש ליישומים שהם מטפלים או ספקי ברירת מחדל עבור פונקציונליות ליבה של מערכת ההפעלה באמצעות המחלקה DefaultPermissionGrantPolicy.java ב-PackageManager. דוגמאות:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

הגדרת הרשאות מותאמות אישית

אתה יכול להגדיר הרשאות וקבוצות מותאמות אישית כרגילות או מסוכנות ולהוסיף הרשאות ספציפיות ל-OEM/ספק לקבוצות הרשאות קיימות, בדיוק כפי שאפשר היה ב-Android 5.x ובגרסאות קודמות.

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

  • אתה יכול להוסיף הרשאות חדשות לקבוצה נוכחית, אך אינך יכול לשנות את מיפוי AOSP של הרשאות מסוכנות וקבוצות הרשאות מסוכנות. (במילים אחרות, לא ניתן להסיר הרשאה מקבוצה ולהקצות לקבוצה אחרת).
  • ניתן להוסיף קבוצות הרשאות חדשות באפליקציות המותקנות במכשיר, אך לא ניתן להוסיף קבוצות הרשאות חדשות במניפסט הפלטפורמה.

בדיקת הרשאות

אנדרואיד כולל בדיקות Compatibility Test Suite (CTS) המוודאות שהרשאות בודדות ממופה לקבוצות הנכונות. עמידה במבחנים אלו היא דרישה עבור תאימות CTS ל-Android 6.0 ואילך.

ביטול הרשאות

באנדרואיד 13 ואילך, אתה יכול לבטל את הרשאות זמן הריצה המוענקות משלך באמצעות Context.revokeSelfPermissionsOnKill() . הביטול מתרחש באופן אסינכרוני ומופעל כאשר זה בטוח לעשות זאת מבלי להפריע למשתמש. כאשר הביטול מופעל, כל התהליכים הפועלים ב-UID המתקשר יומתו.

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

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

הביטול לא יופעל כל עוד התהליך נשאר בחזית, אך ניתן גם להפעיל מיד על ידי הרג ידני של כל התהליכים הפועלים ב-uid הנוכחי, למשל באמצעות System.exit() . עם זאת, מומלץ לתת למערכת להחליט מתי להפעיל אותה.

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