פלטפורמת Android 13 כוללת שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. שינויי ההתנהגות הבאים חלים על כל האפליקציות כשהן פועלות ב-Android 13, ללא קשר ל-targetSdkVersion
. מומלץ לבדוק את האפליקציה ולאחר מכן לשנות אותה לפי הצורך כדי לתמוך בהם כראוי, במקרים הרלוונטיים.
חשוב גם לעיין ברשימת שינויי ההתנהגות שמשפיעים רק על אפליקציות שמטרגטות את Android 13.
ביצועים וסוללה
מנהל המשימות
החל מגרסה Android 13 (רמת API 33), משתמשים יכולים להשלים תהליך עבודה ממסגרת ההתראות כדי להפסיק אפליקציות עם שירותים שפועלים בחזית, כפי שמוצג באיור 1. האפשרות הזו נקראת מנהל המשימות. האפליקציות צריכות להיות מסוגלות לטפל בהפסקה הזו ביוזמת המשתמש.
שיפור הטיפול במשימות של אחזור מראש באמצעות JobScheduler
JobScheduler מספק לאפליקציות דרך לסמן משימות ספציפיות כמשימות 'אחזור מראש' (באמצעות JobInfo.Builder.setPrefetch()
). המשמעות היא שהן אמורות לפעול קרוב להפעלה הבאה של האפליקציה, ואפילו לפני כן, כדי לשפר את חוויית המשתמש.
בעבר, JobScheduler השתמש באות רק כדי לאפשר למשימות של אחזור מראש להשתמש באופן אופורטוני בנתונים פנויים או עודפים.
ב-Android 13 (API ברמה 33) ואילך, המערכת מנסה לקבוע את הפעם הבאה שבה האפליקציה תושק, ומשתמשת בהערכה הזו כדי להריץ משימות של אחסון מראש. מומלץ להשתמש במשימות של אחסון מראש בכל עבודה שרוצים לבצע לפני ההשקה הבאה של האפליקציה.
ניצול משאבי הסוללה
ב-Android 13 (רמת API 33) המערכת יכולה לנהל טוב יותר את חיי הסוללה של המכשיר בדרכים הבאות:
- עדכנו את הכללים לגבי המקרים שבהם המערכת מעבירה את האפליקציה שלכם לקטגוריית 'המתנה מוגבלת' של האפליקציות.
- הגבלות חדשות על הפעולות שהאפליקציה יכולה לבצע כשהמשתמש מעביר אותה למצב 'מוגבל' בנוגע לשימוש בסוללה ברקע.
כשבודקים את האפליקציה עם השינויים האלה, חשוב לבדוק את הדברים הבאים:
בודקים איך האפליקציה מגיבה כשהמערכת מעבירה אותה לקטגוריית 'המתנה' של אפליקציות 'מוגבלות'. משתמשים בפקודה הבאה של Android Debug Bridge (ADB) כדי להקצות את האפליקציה לקטגוריה הזו:
adb shell am set-standby-bucket PACKAGE_NAME restricted
כדאי לבדוק איך האפליקציה מגיבה להגבלות הבאות, שחלות בדרך כלל על אפליקציות שנמצאות במצב 'מוגבל' בנוגע לשימוש בסוללה ברקע:
- לא ניתן להפעיל שירותים שפועלים בחזית
- שירותים קיימים שפועלים בחזית יוסרו מהחזית
- ההתראות לא מופעלות
- משימות לא מתבצעות
משתמשים בפקודת ה-ADB הבאה כדי להעביר את האפליקציה למצב 'מוגבל':
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
מכסות להודעות בעדיפות גבוהה ב-Firebase Cloud Messaging (FCM)
ב-Android 13 (רמת API 33) מתבצעות עדכונים במכסות של Firebase Cloud Messaging (FCM) כדי לשפר את האמינות של העברת הודעות FCM בעדיפות גבוהה באפליקציות שמוצגות בהן התראות בתגובה להודעות FCM בעדיפות גבוהה. השינויים הבאים בוצעו ב-Android 13 (רמת API 33):
- קטגוריות של אפליקציות במצב המתנה לא קובעות יותר כמה הודעות FCM בעדיפות גבוהה האפליקציה יכולה להשתמש בהן.
- המכסות של FCM בעדיפות גבוהה משתנות בהתאם למספר ההתראות שמוצגות למשתמש בתגובה להתרעות FCM בעדיפות גבוהה.
בדומה לגרסאות קודמות של Android, הודעות FCM בעדיפות גבוהה שעוברות את המכסה יורדות לעדיפות רגילה. כשמפעילים את Foreground Services (FGS) בתגובה להודעה מ-FCM, מומלץ לבדוק את התוצאה של RemoteMessage.getPriority()
ולוודא שהיא PRIORITY_HIGH
ו/או לטפל בחריגות פוטנציאליות של ForegroundServiceStartNotAllowedException
.
אם האפליקציה לא תמיד מפרסמת התראות בתגובה להודעות 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
מאפליקציית Google, כולל Voice IME, RecognitionService
ו-API מבוסס-כוונה.
ב-Android 12 בוצעו השינויים הבאים:
- הפונקציות של
SpeechService
הועברו לאפליקציית Speech Services by Google, שהפכה לספקSpeechService
שמוגדר כברירת מחדל. - הפונקציונליות של
RecognitionService
הועברה לאפליקציית Android System Intelligence כדי לתמוך בזיהוי דיבור במכשיר.
כדי לשמור על תאימות האפליקציה ב-Android 12, אפליקציית Google משתמשת ב-trampoline כדי להפנות את התנועה לאפליקציית Speech Services by Google. ב-Android 13, ה-trampoline הזה הוסר.
אפליקציות צריכות להשתמש בספק ברירת המחדל של המכשיר ל-SpeechService
, במקום להטמיע בקוד אפליקציה ספציפית.