ניהול קיצורי הדרך

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

בדף הזה מתוארות הדרכים האלה ועוד כמה דרכים נפוצות לניהול קיצורי הדרך.

התנהגות של קיצור דרך

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

הצגת קיצור הדרך

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

המחלקות LauncherApps מספקות ממשקי API לאפליקציות של מרכזי אפליקציות כדי לגשת לקיצורי דרך.

קיצורי דרך מוצמדים מופיעים במפעיל עצמו, ולכן הם תמיד גלויים. קיצור דרך מוצמד מוסר ממרכז האפליקציות רק במצבים הבאים:

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

יעדי שיתוף הם קבוצת משנה של קיצורי דרך דינמיים שמופיעים בשורה של השיתוף הישיר בקובץ לשיתוף ב-Android.

קובץ לשיתוף ב-Android
איור 1. קובץ לשיתוף ב-Android. היעדים לשיתוף ישיר מופיעים בשורה הראשונה, ואחריהם האפליקציות המדורגות ואז רשימות האפליקציות.

סדר התצוגה של קיצורי הדרך

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

  1. קיצורי דרך סטטיים: קיצורי דרך שהשיטה isDeclaredInManifest() שלהם מחזירה true.
  2. מקשי קיצור דינמיים: מקשי קיצור שהשיטה 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.FLAG_ACTIVITY_NEW_TASK ו-Intent.FLAG_ACTIVITY_CLEAR_TASK. כלומר, כשהאפליקציה פועלת, כל הפעילויות הקיימות באפליקציה מושמדות כשמפעילים קיצור דרך סטטי. אם אתם לא רוצים שההתנהגות הזו תתרחש, אתם יכולים להשתמש בפעילות מסוג trampoline – פעילות בלתי נראית שמתחילה פעילות אחרת – על ידי קריאה לפונקציה finish בתוך בלוק הפעלה או onCreate לפני שהתוכן של Compose מוגדר:

  1. ב-AndroidManifest.xml file, כוללים את הקצאת המאפיינים android:taskAffinity="" בפעילות הטרמפולינה.

  2. בקובץ המשאבים של קיצורי הדרך, מציינים את פעילות הטרמפולינה ב-intent בתוך קיצור הדרך הסטטי.

מידע נוסף על פעילויות טרמפולינה זמין במאמר בנושא הפעלת פעילות אחת מתוך פעילות אחרת.

הגדרת סימונים של כוונות

אפשר לפרסם קיצורי דרך דינמיים עם כל קבוצה של דגלי Intent. מומלץ לציין את השילוב של Intent.FLAG_ACTIVITY_SINGLE_TOP ו-Intent.FLAG_ACTIVITY_CLEAR_TOP בכוונה של קיצור הדרך. כך, אם ComponentActivity כבר פעיל, הוא מועבר לחזית ונעשה בו שימוש חוזר בלי שהוא נהרס, מה שמאפשר לארכיטקטורת הפעילות היחידה לטפל באירוע של קיצור הדרך בצורה חלקה באמצעות onNewIntent().

מידע נוסף על משימות ועל דגלי כוונות זמין במאמר משימות ומקבץ פעילויות קודמות (back stack).

עדכון קיצורי הדרך

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

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

בדוגמה הבאה, הערך שמוחזר על ידי getMaxShortcutCountPerActivity הוא 4:

  1. אפליקציית צ'אט מפרסמת ארבעה קיצורי דרך דינמיים שמייצגים את ארבע השיחות האחרונות: c1,‏ c2,‏ c3 ו-c4.
  2. המשתמש מצמיד את כל ארבעת קיצורי הדרך.
  3. בהמשך, המשתמש מתחיל שלוש שיחות נוספות: c5,‏ c6 ו-c7. אפליקציית בעל התוכן הדיגיטלי מפרסמת מחדש את קיצורי הדרך הדינמיים שלה. רשימת קיצורי הדרך הדינמיים החדשה היא: c4,‏ c5,‏ c6 ו-c7.

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

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

  1. האפליקציה יכולה להשתמש ב-updateShortcuts(Context, List) כדי לעדכן את כל שבעת קיצורי הדרך הקיימים. לדוגמה, אפשר לעדכן את סט קיצורי הדרך הזה כשסמלי הצ'אטים משתנים.
  2. אפשר להשתמש בשיטות 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 <var>your-user-id</var> ]

גיבוי ושחזור

כדי לאפשר למשתמשים לבצע פעולות גיבוי ושחזור באפליקציה כשעוברים בין מכשירים, צריך לכלול את הקצאת המאפיין 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.
            }

        }
    }
    // ...
}