פלטפורמת Android 13 כוללת שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. שינויי ההתנהגות הבאים חלים על כל האפליקציות כשהן פועלות ב-Android 13, ללא קשר ל-targetSdkVersion
. מומלץ לבדוק את האפליקציה ולאחר מכן לשנות אותה לפי הצורך כדי לתמוך בהם כראוי, במקרים הרלוונטיים.
חשוב גם לעיין ברשימת שינויי ההתנהגות שמשפיעים רק על אפליקציות שמטרגטות את Android 13.
ביצועים וסוללה
מנהל המשימות
החל מגרסה Android 13 (רמת API 33), משתמשים יכולים להשלים תהליך עבודה ממסגרת ההתראות כדי להפסיק אפליקציות עם שירותים שפועלים בחזית, כפי שמוצג באיור 1. האפשרות הזו נקראת מנהל המשימות. האפליקציות צריכות להיות מסוגלות לטפל בהפסקה הזו ביוזמת המשתמש.
שיפור הטיפול במשימות של אחזור מראש באמצעות JobScheduler
JobScheduler מספק לאפליקציות דרך לסמן משימות ספציפיות כמשימות 'אחזור מראש' (באמצעות JobInfo.Builder.setPrefetch()
). המשמעות היא שהן אמורות לפעול קרוב להפעלה הבאה של האפליקציה, ואפילו לפני כן, כדי לשפר את חוויית המשתמש.
בעבר, JobScheduler השתמש באות רק כדי לאפשר למשימות של אחזור מראש להשתמש באופן אופורטוני בנתונים פנויים או עודפים.
בגרסת Android 13 (רמת API 33) ואילך, המערכת מנסה לקבוע מתי האפליקציה הבאה תושק, ומשתמשת בהערכה כדי להריץ משימות לשליפה מראש (prefetch). מומלץ להשתמש במשימות של אחסון מראש בכל עבודה שרוצים לבצע לפני ההשקה הבאה של האפליקציה.
ניצול משאבי הסוללה
ב-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
, במקום להטמיע בקוד אפליקציה ספציפית.