שינויים בהתנהגות: כל האפליקציות

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

חשוב גם לבדוק את רשימת השינויים בהתנהגות שמשפיעים רק על אפליקציות שמטרגטות ל-Android 13.

ביצועים וסוללה

מנהל משימות

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

החל מ-Android 13 (רמת API‏ 33), המשתמשים יכולים להשלים תהליך עבודה מחלונית ההתראות כדי לעצור אפליקציות שיש להן שירותים שפועלים בחזית, כמו שמוצג באיור 1. האפשרות הזו נקראת מנהל המשימות. האפליקציות צריכות להיות מסוגלות לטפל בעצירה הזו שבוצעה על ידי המשתמש.

שיפור הטיפול במשימות של אחזור מראש באמצעות JobScheduler

‫JobScheduler מאפשר לאפליקציות לסמן משימות ספציפיות כמשימות "אחזור מראש" (באמצעות JobInfo.Builder.setPrefetch()). כלומר, כדי לשפר את חוויית המשתמש, המשימות האלה צריכות לפעול לפני ההפעלה הבאה של האפליקציה, ובסמוך אליה. בעבר, JobScheduler השתמש באות רק כדי לאפשר למשימות אחזור מראש להשתמש בנתונים חינמיים או עודפים באופן אופורטוניסטי.

ב-Android 13 (רמת API‏ 33) ואילך, המערכת מנסה לקבוע מתי האפליקציה תופעל בפעם הבאה, ומשתמשת בהערכה הזו כדי להריץ משימות של אחזור מראש. כדאי להשתמש במשימות שליפה מראש לכל פעולה שרוצים שהאפליקציה תבצע לפני ההפעלה הבאה שלה.

ניצול משאבי הסוללה

ב-Android 13 (רמת API‏ 33) יש את הדרכים הבאות שמאפשרות למערכת לנהל טוב יותר את חיי הסוללה של המכשיר:

כשאתם בודקים את האפליקציה עם השינויים האלה, חשוב לוודא את הדברים הבאים:

  • בודקים איך האפליקציה מגיבה כשהמערכת מעבירה אותה ל"קבוצת האפליקציות המוגבלות" במצב המתנה. כדי להקצות את האפליקציה לקטגוריה הזו, משתמשים בפקודה הבאה של ממשק הגישור של Android‏ (ADB):

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • כדאי לבדוק איך האפליקציה מגיבה להגבלות הבאות, שבדרך כלל חלות על אפליקציות שנמצאות במצב"מוגבל" לשימוש בסוללה ברקע:

    • לא ניתן להפעיל שירותים שפועלים בחזית
    • שירותים קיימים שפועלים בחזית מוסרים מהחזית
    • השעונים המעוררים לא מופעלים
    • המשימות לא מבוצעות

    כדי להעביר את האפליקציה למצב "מוגבל", משתמשים בפקודת ה-ADB הבאה:

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

מכסות של העברת הודעות בענן ב-Firebase‏ (FCM) בעדיפות גבוהה

ב-Android 13 (רמת API‏ 33) עודכנו המכסות של העברת הודעות בענן ב-Firebase ‏ (FCM) כדי לשפר את האמינות של העברת הודעות FCM בעדיפות גבוהה באפליקציות שמציגות התראות בתגובה להודעות FCM בעדיפות גבוהה. השינויים הבאים בוצעו ב-Android 13 (רמת API ‏33):

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

כמו בגרסאות קודמות של Android, הודעות FCM בעדיפות גבוהה שחורגות מהמכסה מורדות לעדיפות רגילה. כשמפעילים שירותים שפועלים בחזית (FGS) בתגובה ל-FCM, מומלץ לבדוק את התוצאה של RemoteMessage.getPriority() ולוודא שהיא PRIORITY_HIGH ו/או לטפל בכל חריגה פוטנציאלית של ForegroundServiceStartNotAllowedException.

אם האפליקציה לא תמיד מפרסמת התראות בתגובה להודעות FCM בעדיפות גבוהה, מומלץ לשנות את העדיפות של הודעות ה-FCM האלה לרגילה כדי שההודעות שמובילות להתראה לא יורדו בדרגה.

פרטיות

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

ב-Android 13 (רמת API‏ 33) נוספה הרשאה לשליחת התראות בזמן הריצה: POST_NOTIFICATIONS. השינוי הזה עוזר למשתמשים להתמקד בהתראות שהכי חשובות להם.

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

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

הסתרת תוכן רגיש בלוח

אם האפליקציה מאפשרת למשתמשים להעתיק ללוח תוכן רגיש, כמו סיסמאות או פרטי כרטיס אשראי, צריך להוסיף דגל ל-ClipDescription של ClipData לפני שקוראים ל-ClipboardManager#setPrimaryClip(). הוספת הדגל הזה מונעת הצגה של תוכן רגיש בתצוגה המקדימה של התוכן.

תצוגה מקדימה של טקסט שהועתק בלי לסמן תוכן רגיש
תצוגה מקדימה של טקסט שהועתק בלי לסמן תוכן רגיש.
תצוגה מקדימה של טקסט שהועתק עם סימון של תוכן רגיש.
תצוגה מקדימה של טקסט שהועתק עם סימון של תוכן רגיש.

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


// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

מידע נוסף על ממשק המשתמש החדש של לוח העריכה זמין בדף התכונה העתקה והדבקה.

אבטחה

העברה ממזהה משתמש משותף

אם האפליקציה משתמשת במאפיין android:sharedUserId שהוצא משימוש, וכבר לא תלויה בפונקציונליות של המאפיין, אפשר להגדיר את המאפיין android:sharedUserMaxSdkVersion לערך 32, כמו שמוצג בקטע הקוד הבא:

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

המאפיין הזה מודיע למערכת שהאפליקציה כבר לא מסתמכת על מזהה משתמש משותף. אם האפליקציה מצהירה על android:sharedUserMaxSdkVersion והיא מותקנת לאחרונה במכשירים עם Android בגרסה 13 ומעלה, האפליקציה מתנהגת כאילו אף פעם לא הגדרתם את android:sharedUserId. אפליקציות מעודכנות עדיין משתמשות במזהה המשתמש המשותף הקיים.

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

חוויית משתמש

התראות על שירותים שפועלים בחזית שאפשר לסגור

במכשירים עם Android בגרסה 13 ואילך, המשתמשים יכולים לסגור התראות שמשויכות לשירותים שפועלים בחזית כברירת מחדל.

פונקציונליות עיקרית

הוסר עותק מדור קודם של הטמעת שירות הדיבור

ב-Android 13, ההטמעה של SpeechService – כולל Voice IME,‏ RecognitionService ו-API מבוסס-Intent – הוסרה מאפליקציית Google.

ב-Android 12, בוצעו השינויים הבאים:

  • הפונקציות של SpeechService הועברו לאפליקציית Speech Services by Google, שהפכה לספק ברירת המחדל של SpeechService.
  • הפונקציונליות של RecognitionService הועברה לאפליקציה Android System Intelligence כדי לתמוך בזיהוי דיבור במכשיר.

כדי לשמור על תאימות האפליקציה ב-Android 12, אפליקציית Google משתמשת בטרמפולינה כדי להפנות את התנועה לאפליקציית שירותי הדיבור של Google. ב-Android 13, הטרמפולינה הזו הוסרה.

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