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

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

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

אופן הפעולה של מקשי הקיצור

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

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

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

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

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

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

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

צילום מסך של Android Sharesheet
איור 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).

הסדר של יעדי השיתוף מבוסס על גורמים שונים, כולל משתמשים קודמים היסטוריה, עדכניות, תדירות, רמז לדירוג, השימוש באפליקציות, והעדיפות שהוגדרה בשיחה שמשויכת קיצור דרך לשיתוף. שיתוף יעדים שנוצרו באמצעות שיתוף קיצורי דרך ב-API מקבלים עדיפות על פני יעדי נתח החשיפות שהפיקוח ChooserTargetService שהוצא משימוש ב-Android 11. ב-Android 12 ואילך יעדי שיתוף שנוצרו על ידי ChooserTargetService שהוצא משימוש לא יופיעו יותר שיתוף הגיליון.

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

ניהול של כמה כוונות ופעילויות

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

הקצאה של כמה כוונות

כשיוצרים קיצור דרך באמצעות ShortcutInfoCompat.Builder, אפשר להשתמש ב- setIntents() במקום setIntent(). אם תחייגו אל setIntents(), יכול להפעיל פעילויות מרובות בתוך האפליקציה כשהמשתמש בוחר קיצור דרך, הצבת כל הפעילות מלבד הפעילות האחרונה ברשימה במקבץ האחורי. אם ואז המשתמש מקיש על לחצן 'הקודם' במכשיר ומוצג פעילות נוספת באפליקציה במקום לחזור למרכז האפליקציות של המכשיר.

התחלת פעילות אחת לאחרת

קיצורי דרך סטטיים לא יכולים לכלול סימונים בהתאמה אישית עם כוונת רכישה. הכוונה הראשונה של מודל סטטי מקש הקיצור תמיד כולל Intent.FLAG_ACTIVITY_NEW_TASK וגם Intent.FLAG_ACTIVITY_CLEAR_TASK מוגדר. המשמעות היא שכשהאפליקציה פועל, כל הפעילויות הקיימות באפליקציה מושמדות כאשר קיצור הדרך מופעל. אם אתם לא מעוניינים בהתנהגות הזו, אתם יכולים להשתמש בטרמפולינה פעילות – פעילות בלתי נראית שמתחילה בפעילות אחרת – Activity.onCreate(Bundle) שקורא ל-Activity.finish():

  1. בקובץ AndroidManifest.xml, יש לכלול את הקצאת המאפיין android:taskAffinity= אינץ' בפעילות הטרמפולינה.
  2. בקובץ המשאבים של קיצורי הדרך, מפנים לפעילות הטרמפולינה Intent בתוך קיצור הדרך הסטטי.

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

הגדרה של סימוני Intent

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

מידע נוסף על משימות ודגלי Intent זמין במאמר משימות ומקבץ חזרה.

עדכון מקשי הקיצור

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

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

ניקח לדוגמה את הדוגמה הבאה, שמניחה שהערך המוחזר על ידי getMaxShortcutCountPerActivity() הוא 4:

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

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

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

  1. האפליקציה יכולה להשתמש ב-updateShortcuts(Context, List) כדי לעדכן כל אחד את שבעת קיצורי הדרך הקיימים. לדוגמה, אפשר לעדכן את קבוצת מקשי הקיצור הזו כשהצ'אט משותף הסמלים משתנים.
  2. אפשר להשתמש בaddDynamicShortcuts(Context, List) setDynamicShortcuts(Context, List) שיטות לעדכון קיצורי דרך קיימים עם אותם מזהים. עם זאת, אי אפשר להשתמש בהם כדי לעדכן למקשי קיצור מוצמדים, מכיוון ששתי השיטות האלה מנסות להמיר את הרשימות הנתונות של לקיצורי דרך דינמיים.

אין מגבלה על מספר קיצורי הדרך שאפשר להעביר לתצוגה ב- אפליקציות של Assistant כמו Google Assistant. שימוש בpushDynamicShortcut() בספריית Jetpack ShortcutManagerCompat כדי ליצור ולעדכן קיצורי דרך לשימוש באפליקציות של Assistant. כמו כן, צריך להוסיף את שילוב קיצורי הדרך של Google לספרייה באפליקציה כדי שקישורים דינמיים יהיו כשירים להופיע ב-Google עוזר/ת.

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

טיפול בשינויים באזור של המערכת

האפליקציות חייבות לעדכן קיצורי דרך דינמיים ומוצמדים כשהם מקבלים שידור של Intent.ACTION_LOCALE_CHANGED שמציין שינוי במערכת שילוב של שפה ואזור.

מעקב אחר השימוש בקיצור הדרך

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

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

האפליקציה שלך עוקבת אחר השימוש בקיצורי דרך דינמיים על ידי הפעלה של pushDynamicShortcut() ומעבירים אליה את המזהה של קיצור הדרך כאשר כשמתרחש אירוע רלוונטי. דחיפת השימוש בקיצורי דרך דינמיים בשיטה הזו מאפשרת אפליקציות עוזר דיגיטלי כמו Google Assistant מציעות למשתמשים קיצורי דרך רלוונטיים. מכיוון ששיטת pushDynamicShortcut() מדווחת על שימוש בזמן ביצוע שיחה, אין להתקשר את ה-method reportShortcutUsed() לאותם קיצורי דרך.

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

השבתת מקשי הקיצור

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

הגבלת קצב של יצירת בקשות

כשמשתמשים בsetDynamicShortcuts(), addDynamicShortcuts(), או updateShortcuts() שיטות, יכול להיות שאפשר לקרוא לשיטות האלה רק מספר פעמים ספציפי באפליקציה ברקע – אפליקציה ללא פעילויות או שירותים שפועלים בחזית. המגבלה על מספר הפעמים הספציפי שאפשר קוראים לשיטות האלה הגבלת קצב של יצירת בקשות. התכונה הזו מונעת ShortcutManagerCompat מצריכת יתר של משאבים במכשיר.

כשהגבלת הקצב של יצירת הבקשות פעילה, הפונקציה isRateLimitingActive() מחזירה True. עם זאת, הגבלת הקצב של יצירת הבקשות מתאפסת באירועים מסוימים, כך שגם אפליקציות שפועלות ברקע יכולים להפעיל ShortcutManager methods עד שמגיעים שוב למגבלת הקצב של יצירת הבקשות. האלה אירועים כוללים את אלה:

  • האפליקציה מועברת לחזית.
  • הלוקאל של המערכת משתנה.
  • המשתמש מבצע את הפעולה תשובה בגוף ההודעה בהתראה.

אם נתקלתם בהגבלת קצב של יצירת הבקשות במהלך הפיתוח או הבדיקה, אפשר לבחור אפשרויות למפתחים > איפוס הגבלת הדירוג של ShortcutManager מתוכלו , או להזין את הפקודה הבאה ב-adb:

$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]

גיבוי ושחזור

אתם יכולים לאפשר למשתמשים לבצע פעולות גיבוי ושחזור באפליקציה כשהם החלפת מכשירים על ידי הכללת android:allowBackup="true" שיוך בקובץ המניפסט של האפליקציה. אם אתם תומכים בגיבוי ובשחזור, אל תשמרו את הנקודות הבאות לגבי קיצורי דרך של אפליקציות:

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

קטע הקוד הבא מראה מהי הדרך הטובה ביותר לשחזר את הדינמיקה של האפליקציה ואיך לבדוק אם קיצורי הדרך המוצמדים של האפליקציה נשמרו:

Kotlin

class MyMainActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (ShortcutManagerCompat.dynamicShortcuts.size == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.pinnedShortcuts.size > 0) {
                // Pinned shortcuts are restored. Use updateShortcuts() to make
                // sure they contain up-to-date information.
            }

        }
    }
    // ...
}

Java

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (ShortcutManagerCompat.getDynamicShortcuts().size() == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.getPinnedShortcuts().size() > 0) {
                // Pinned shortcuts are restored. Use pdateShortcuts() to make
                // sure they contain up-to-date information.
            }
        }
    }
    // ...
}