פלטפורמת 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 (FCM)
ב-Android 13 (רמת API 33) מתבצעים עדכונים במכסות של Firebase Cloud Messaging (FCM) כדי לשפר את האמינות של העברת הודעות FCM בעדיפות גבוהה באפליקציות שמוצגות בהן התראות בתגובה להודעות FCM בעדיפות גבוהה. השינויים הבאים השתנו ב-Android 13 (רמת API 33):
- קטגוריות ההמתנה של האפליקציה כבר לא קובעות בכמה מפתחות FCM עם עדיפות גבוהה האפליקציה יכולה להשתמש.
- המכסות של FCM בעדיפות גבוהה משתנות בהתאם למספר ההתראות שמוצגות למשתמש בתגובה להתרעות FCM בעדיפות גבוהה.
כמו בגרסאות קודמות של Android, הודעות FCM בעדיפות גבוהה שעוברות את המכסה יורדות לעדיפות רגילה. כשמפעילים את שירותים שפועלים בחזית (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 מסירה מאפליקציית Google את ההטמעה של SpeechService
, כולל 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
, במקום לכתוב קוד קשה לאפליקציה ספציפית.