אחרי שיוצרים קיצורי דרך, יכול להיות שיהיה צורך לנהל אותם במהלך מחזור החיים של האפליקציה. לדוגמה, יכול להיות שתרצו לבצע אופטימיזציה של האפליקציה על ידי בדיקה של התדירות שבה המשתמשים משלימים פעולות ספציפיות באמצעות קיצורי הדרך. במקרה אחר, יכול להיות שתחליטו להשבית קיצור דרך מוצמד כדי למנוע מהאפליקציה לבצע פעולות לא עדכניות או חסרות. אם אתם משתמשים בקיצורי דרך בשיחות, כדאי לעקוב אחרי השימוש בהם כדי לספק אותות שישפרו את הדירוג שלהם.
בדף הזה מתוארות הדרכים האלה ועוד כמה דרכים נפוצות לניהול קיצורי הדרך.
התנהגות של קיצורי דרך
בסעיפים הבאים מופיע מידע כללי על אופן הפעולה של קיצורי דרך, כולל נראות, סדר הצגה ודירוגים.
הצגת קיצורי דרך
קיצורי דרך סטטיים וקיצורי דרך דינמיים מופיעים ב-Launcher או באסיסטנט נתמכים כשמשתמש מבצע תנועה ספציפית או פקודה קולית. במרכזי אפליקציות נתמכים, המחווה היא לחיצה ארוכה על סמל האפליקציה במרכז האפליקציות, אבל יכול להיות שהמחווה תהיה שונה באפליקציות אחרות של מרכזי אפליקציות. בעזרת Google Assistant, אפשר להציג קיצורי דרך ב-Assistant או להפעיל אותם באמצעות פקודה קולית של המשתמש.
המחלקות LauncherApps מספקות ממשקי API לאפליקציות של מרכזי אפליקציות כדי לגשת לקיצורי דרך.
קיצורי דרך מוצמדים מופיעים במפעיל האפליקציות עצמו, ולכן הם תמיד גלויים. קיצור דרך מוצמד מוסר ממרכז האפליקציות רק במצבים הבאים:
- המשתמש מסיר אותו.
- האפליקציה שמשויכת לקיצור הדרך מוסרת.
- המשתמש מנקה את הנתונים של האפליקציה על ידי מעבר אל הגדרות > אפליקציות והתראות, בחירת האפליקציה והקשה על אחסון > ניקוי האחסון.
יעדי שיתוף הם קבוצת משנה של קיצורי דרך דינמיים שמופיעים בשורה של השיתוף הישיר בקובץ לשיתוף ב-Android.
סדר התצוגה של קיצורי הדרך
כשקיצורי הדרך של אפליקציה מוצגים במרכז האפליקציות, הם צריכים להופיע בסדר הבא:
- קיצורי דרך סטטיים: קיצורי דרך שהמתודה
isDeclaredInManifest()שלהם מחזירהtrue. - מקשי קיצור דינמיים: מקשי קיצור ששיטת
ShortcutInfo.isDynamic()שלהם מחזירהtrue.
בכל סוג של קיצור דרך – סטטי ודינמי – קיצורי הדרך ממוינים לפי דירוג עולה בהתאם ל-ShortcutInfo.getRank. בנוסף, Google Assistant לוקחת בחשבון את הדירוג של קיצור הדרך כשהיא קובעת אילו קיצורי דרך הקשריים להציג למשתמשים.
הדירוגים הם מספרים שלמים לא שליליים ורציפים. קיצורי דרך סטטיים מדורגים מהראשון לאחרון לפי הסדר שבו הם מופיעים בקובץ shortcuts.xml. בקיצורי דרך דינמיים, אפשר לעדכן את הדירוגים של קיצורי דרך קיימים כשקוראים ל-updateShortcuts(Context, List), addDynamicShortcuts(Context,
List), pushDynamicShortcut(Context, ShortcutInfoCompat) או setDynamicShortcuts(Context, List).
סדר יעדי השיתוף מבוסס על גורמים שונים, כולל היסטוריית משתמשים קודמת, עדכניות, תדירות, רמז לדירוג, שימוש באפליקציה והעדיפות שמוגדרת בשיחה שמשויכת לקיצור דרך לשיתוף. ליעדי שיתוף שנוצרו באמצעות Sharing Shortcuts API יש עדיפות על פני יעדי שיתוף שנוצרו באמצעות ChooserTargetService, שיצא משימוש ב-Android 11. ב-Android מגרסה 12 ואילך, יעדי השיתוף שנוצרו על ידי ChooserTargetService שהוצא משימוש לא יופיעו יותר בגיליון השיתוף.
ברוב מרכזי האפליקציות מוצגים עד ארבעה קיצורי דרך. בכל שילוב של קיצורי דרך סטטיים וקיצורי דרך דינמיים שמוגדרים, מרכז האפליקציות מציג עד שני קיצורי דרך סטטיים ושני קיצורי דרך דינמיים. לדוגמה, אם מגדירים ארבעה קיצורי דרך סטטיים ויוצרים באופן פרוגרמטי שלושה קיצורי דרך דינמיים, מרכז האפליקציות יציג את שני קיצורי הדרך הסטטיים הראשונים ואת שני קיצורי הדרך הדינמיים עם הדירוג הכי גבוה.
ניהול של כמה כוונות ופעילויות
אם רוצים שהאפליקציה תבצע כמה פעולות כשהמשתמש מפעיל קיצור דרך, אפשר להגדיר אותה כך שתפעיל פעילויות עוקבות. כדי לעשות את זה, אפשר להקצות כמה כוונות, להפעיל פעילות אחת מתוך פעילות אחרת או להגדיר דגלים של כוונות, בהתאם לסוג קיצור הדרך.
איך מתחילים פעילות אחת מתוך פעילות אחרת
לקיצורי דרך סטטיים לא יכולים להיות דגלים מותאמים אישית של כוונות. ל-Intent הראשון של קיצור דרך סטטי תמיד מוגדרים הערכים Intent.FLAG_ACTIVITY_NEW_TASK ו-Intent.FLAG_ACTIVITY_CLEAR_TASK. כלומר, כשהאפליקציה פועלת, כל הפעילויות הקיימות באפליקציה נהרסות כשמפעילים קיצור דרך סטטי. אם אתם לא רוצים שההתנהגות הזו תתרחש, אתם יכולים להשתמש בפעילות מסוג trampoline – פעילות בלתי נראית שמתחילה פעילות אחרת – על ידי קריאה לפונקציה finish בתוך בלוק הפעלה או onCreate לפני שהתוכן של Compose מוגדר:
ב-
AndroidManifest.xml file, כוללים את הקצאת המאפייןandroid:taskAffinity=""בפעילות הטרמפולינה.בקובץ המשאבים של קיצורי הדרך, מציינים את פעילות הטרמפולינה ב-intent בתוך קיצור הדרך הסטטי.
מידע נוסף על פעילויות טרמפולינה זמין במאמר בנושא התחלת פעילות אחת מתוך פעילות אחרת.
הגדרת סימונים של כוונות
אפשר לפרסם קיצורי דרך דינמיים עם כל קבוצה של דגלי Intent.
מומלץ לציין את השילוב של Intent.FLAG_ACTIVITY_SINGLE_TOP ושל Intent.FLAG_ACTIVITY_CLEAR_TOP בכוונה של קיצור הדרך. כך, אם ComponentActivity כבר פעיל, הוא מועבר לחזית ונעשה בו שימוש חוזר בלי שהוא נהרס. כך הארכיטקטורה של הפעילות היחידה יכולה לטפל באירוע של קיצור הדרך בצורה חלקה באמצעות onNewIntent().
מידע נוסף על משימות ועל דגלי כוונות זמין במאמר משימות ומקבץ פעילויות קודמות (back stack).
עדכון קיצורי הדרך
כל סמל מרכז האפליקציות של אפליקציה יכול להכיל לכל היותר מספר של קיצורי דרך סטטיים ודינמיים ביחד ששווה לערך שמוחזר על ידי getMaxShortcutCountPerActivity. אין הגבלה על מספר קיצורי הדרך המוצמדים שאפליקציה יכולה ליצור.
כשמוסיפים קיצור דרך דינמי לסימנייה, גם אם בעל האתר מסיר אותו כקיצור דרך דינמי, קיצור הדרך שנוסף לסימנייה עדיין מוצג וניתן להפעלה. כך אפשר להגדיר לאפליקציה יותר מ-getMaxShortcutCountPerActivity קיצורי דרך.
בדוגמה הבאה, הערך שמוחזר על ידי getMaxShortcutCountPerActivity הוא 4:
- אפליקציית צ'אט מפרסמת ארבעה קיצורי דרך דינמיים שמייצגים את ארבע השיחות האחרונות: c1, c2, c3 ו-c4.
- המשתמש מצמיד את כל ארבעת קיצורי הדרך.
- בהמשך, המשתמש מתחיל שלוש שיחות נוספות: c5, c6 ו-c7. אפליקציית בעל התוכן הדיגיטלי מפרסמת מחדש את קיצורי הדרך הדינמיים שלה. רשימת קיצורי הדרך הדינמיים החדשה היא: c4, c5, c6 ו-c7.
האפליקציה צריכה להסיר את c1, c2 ו-c3, כי היא לא יכולה להציג יותר מארבעה קיצורי דרך דינמיים. עם זאת, c1, c2 ו-c3 הם עדיין קיצורי דרך מוצמדים שהמשתמש יכול לגשת אליהם ולהפעיל אותם.
לאחר מכן, למשתמש תהיה גישה ל-7 קיצורי דרך שמקשרים לפעילויות באפליקציה של בעל התוכן הדיגיטלי. הסיבה לכך היא שהמספר הכולל כולל את המספר המקסימלי של קיצורי דרך ואת שלושת קיצורי הדרך המוצמדים.
- האפליקציה יכולה להשתמש ב-
updateShortcuts(Context, List)כדי לעדכן את כל שבעת קיצורי הדרך הקיימים. לדוגמה, אפשר לעדכן את קיצורי הדרך האלה כשמשתנים הסמלים של המשתתפים בצ'אט. - אפשר להשתמש בשיטות
addDynamicShortcuts(Context, List)ו-setDynamicShortcuts(Context, List)כדי לעדכן קיצורי דרך קיימים עם אותם מזהים. עם זאת, אי אפשר להשתמש בהן כדי לעדכן קיצורי דרך לא דינמיים שמוצמדים, כי שתי השיטות האלה מנסות להמיר את רשימות קיצורי הדרך שצוינו לקיצורי דרך דינמיים.
אין הגבלה על מספר קיצורי הדרך שאפשר להציג באפליקציות של Assistant, כמו Google Assistant. משתמשים בשיטה pushDynamicShortcut של ספריית ShortcutManagerCompat Jetpack כדי ליצור ולעדכן קיצורי דרך לשימוש באפליקציות של העוזר הדיגיטלי. בנוסף, צריך להוסיף את ספריית Google Shortcuts Integration לאפליקציה כדי שהקישורים הדינמיים יוכלו להופיע ב-Google Assistant.
מידע נוסף על הנחיות לקיצורי דרך באפליקציות, כולל עדכון קיצורי דרך, זמין במאמר שיטות מומלצות לקיצורי דרך.
טיפול בשינויים בלוקאל של המערכת
אפליקציות צריכות לעדכן קיצורי דרך דינמיים ומוצמדים כשהן מקבלות שידור של Intent.ACTION_LOCALE_CHANGED שמציין שינוי בלוקאל של המערכת.
מעקב אחר השימוש בקיצורי דרך
כדי לקבוע באילו מצבים יופיעו קיצורי דרך סטטיים ודינמיים,
ה-Launcher בודק את היסטוריית ההפעלה של קיצורי הדרך. בקיצורי דרך סטטיים, אפשר לעקוב אחרי השלמת פעולות ספציפיות באפליקציה על ידי קריאה לשיטה reportShortcutUsed והעברת מזהה של קיצור דרך כשמתרחש אחד מהאירועים הבאים:
- המשתמש בוחר את קיצור הדרך עם המזהה שצוין.
- בתוך האפליקציה, המשתמש משלים באופן ידני את הפעולה שמתאימה לאותה מקש קיצור.
האפליקציה עוקבת אחרי השימוש בקיצורי דרך דינמיים על ידי קריאה ל-method pushDynamicShortcut
והעברת מזהה קיצור הדרך כשמתרחש אירוע רלוונטי.
השיטה הזו מאפשרת לאפליקציות של Assistant, כמו Google Assistant, להציע למשתמשים קיצורי דרך רלוונטיים. השיטה pushDynamicShortcut מדווחת על השימוש כשהיא מופעלת, לכן אל תפעילו את השיטה reportShortcutUsed עבור אותם קיצורי דרך.
בקיצורי דרך שקשורים לשיחות, חשוב לעקוב אחרי השימוש בהודעות יוצאות ונכנסות. מידע נוסף מופיע בקטע שיטות מומלצות לגבי אנשים ושיחות.
השבתת קיצורי דרך
האפליקציה והמשתמשים יכולים להצמיד קיצורי דרך למפעיל האפליקציות במכשיר, ולכן יכול להיות שקיצורי הדרך המוצמדים יפנו את המשתמשים לפעולות באפליקציה שכבר לא רלוונטיות או לא קיימות. כדי לנהל את המצב הזה, אפשר להשבית את קיצורי הדרך שלא רוצים שהמשתמשים יבחרו בהם באמצעות הקריאה ל-disableShortcuts. הפעולה הזו מסירה את קיצורי הדרך שצוינו מרשימת קיצורי הדרך הסטטיים והדינמיים, ומשביתה עותקים מוצמדים של קיצורי הדרך האלה. אפשר גם להשתמש בגרסה עמוסה מדי של ה-method הזו שמקבלת CharSequence כהודעת שגיאה מותאמת אישית. הודעת השגיאה הזו מופיעה כשמשתמשים מנסים להפעיל קיצור דרך מושבת.
הגבלת קצב של יצירת בקשות
כשמשתמשים בשיטות setDynamicShortcuts, addDynamicShortcuts או updateShortcuts, יכול להיות שאפשר יהיה להפעיל את השיטות האלה רק מספר מסוים של פעמים באפליקציה שפועלת ברקע – אפליקציה ללא פעילויות או שירותים בחזית.
ההגבלה על מספר הפעמים הספציפי שבהן אפשר להפעיל את השיטות האלה נקראת הגבלת קצב של יצירת בקשות. התכונה הזו מונעת מ-ShortcutManagerCompat לצרוך יותר מדי משאבים במכשיר.
כשמגבלת הקצב פעילה, הפונקציה isRateLimitingActive מחזירה את הערך True.
עם זאת, הגבלת הקצב מתאפסת במהלך אירועים מסוימים, כך שאפילו אפליקציות ברקע יכולות לקרוא לשיטות ShortcutManager עד להגעה שוב להגבלת הקצב. האירועים האלה כוללים:
- אפליקציה עוברת לחזית.
- הלוקאל של המערכת משתנה.
- המשתמש מבצע את הפעולה תגובה מוטמעת בהתראה.
אם נתקלתם בהגבלת קצב במהלך פיתוח או בדיקה, אתם יכולים לבחור באפשרות אפשרויות למפתחים > איפוס הגבלת הקצב של ShortcutManager מתוך ההגדרות של המכשיר, או להזין את הפקודה הבאה ב-adb:
adb shell cmd shortcut reset-throttling [ --user your-user-id ]
גיבוי ושחזור
כדי לאפשר למשתמשים לבצע פעולות גיבוי ושחזור באפליקציה שלכם כשהם מחליפים מכשירים, צריך לכלול את הקצאת המאפיין android:allowBackup="true" בקובץ המניפסט של האפליקציה. אם אתם תומכים בגיבוי ובשחזור, חשוב לזכור את הנקודות הבאות לגבי קיצורי דרך לאפליקציות:
- קיצורי דרך סטטיים מתפרסמים מחדש באופן אוטומטי, אבל רק אחרי שהמשתמש מתקין מחדש את האפליקציה במכשיר חדש.
- אי אפשר לגבות קיצורי דרך דינמיים, לכן צריך להוסיף לאפליקציה לוגיקה שתאפשר לפרסם אותם מחדש כשמשתמש פותח את האפליקציה במכשיר חדש.
- קיצורי דרך מוצמדים משוחזרים אוטומטית למרכז האפליקציות של המכשיר, אבל המערכת לא מגבה סמלים שמשויכים לקיצורי דרך מוצמדים. לכן, כדאי לשמור את התמונות של קיצורי הדרך המוצמדים באפליקציה, כדי שתוכלו לשחזר אותן במהירות במכשיר חדש.
בקטע הקוד הבא מוצג איך הכי טוב לשחזר את קיצורי הדרך הדינמיים של האפליקציה, ואיך לבדוק אם קיצורי הדרך המוצמדים של האפליקציה נשמרו:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (ShortcutManagerCompat.getDynamicShortcuts(this).isEmpty()) {
// Application restored. Re-publish dynamic shortcuts.
if (ShortcutManagerCompat.getPinnedShortcuts(this).isNotEmpty()) {
// Pinned shortcuts are restored. Use updateShortcuts() to make
// sure they contain up-to-date information.
}
}
}
// ...
}