הגדרת יעדים של שיתוף ישיר

איור 1: השורה 'שיתוף ישיר' בדף השיתוף, כפי שמוצג 1

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

ShortcutManagerCompat הוא API של AndroidX שמספק קיצורי דרך לשיתוף, תואמים ל-API של ChooserTargetService שהוצא משימוש. זה המועדף לפרסם גם קיצורי דרך לשיתוף וגם ChooserTargets. לקבלת הוראות, למידע נוסף, ראו שימוש ב-AndroidX כדי לספק קיצורי דרך לשיתוף ו-ChooserTargets בדף הזה.

פרסום יעדים של שיתוף ישיר

בשורה Sharesheet Direct 'שיתוף ישיר' מוצגים רק קיצורי דרך דינמיים שסופקו על ידי שיתוף קיצורי דרך API. כדי לפרסם שיתוף ישיר, יש לפעול לפי השלבים הבאים יעדים.

  1. בקובץ משאבי ה-XML של האפליקציה, צריך להצהיר על רכיבי share-target.

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity">
        <data android:mimeType="text/plain" />
        <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" />
    </share-target>
    </shortcuts>
    
  2. כשהאפליקציה מופעלת, צריך להשתמש ב-setDynamicShortcuts כדי לסדר את קיצורי הדרך הדינמיים לפי חשיבות.

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

    Kotlin

    ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))
    

    Java

    List<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    shortcuts.add(shortcut1);
    shortcuts.add(shortcut2);
    ...
    ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
    
  3. אם מפתחים אפליקציית תקשורת, אפשר לדווח על שימוש בקיצור דרך באמצעות pushDynamicShortcut מיד בכל פעם שהמשתמש מקבל או שולח הודעה לאיש קשר. ראה שימוש בקיצור דרך לדוח עבור אפליקציות תקשורת שבדף הזה. לדוגמה, דיווח על שימוש בהודעות שהמשתמש שלח על ידי לציין קישורי יכולות שנמצאות בקיצור הדרך ShortcutInfoCompat.Builder#addCapabilityBinding עם היכולת actions.intent.SEND_MESSAGE.

    Kotlin

    val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
      ...
      .setShortLabel(firstName)
      .setLongLabel(fullName)
      .setCategories(matchedCategories)
      .setLongLived(true)
    .addCapabilityBinding("actions.intent.SEND_MESSAGE").build()
    ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
    

    Java

    ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
      ...
      .setShortLabel(firstName)
      .setLongLabel(fullName)
      .setCategories(matchedCategories)
      .setLongLived(true)
      .addCapabilityBinding("actions.intent.SEND_MESSAGE")
      .build();
    
    ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
    
  4. אם המשתמש מוחק איש קשר, אפשר ללחוץ על removeLongLivedShortcut זה המועדף דרך להסיר את קיצור הדרך גם אם הוא נשמר במטמון על ידי המערכת שירותים שונים. בקטע הקוד הבא אפשר לראות דוגמה לאופן שבו אפשר לעשות זאת.

    Kotlin

    val deleteShortcutId = "..."
    ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))
    

    Java

    String deleteShortcutId = "...";
    ShortcutManagerCompat.removeLongLivedShortcuts(
        myContext, Arrays.asList(deleteShortcutId));
    

שיפור הדירוגים של יעדי השיתוף הישיר שלך

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

  • צריך לוודא שכל shortcutIds הם ייחודיים ואף פעם לא נעשה בהם שימוש חוזר למטרות שונות.
  • לוודא שקיצור הדרך לטווח ארוך באמצעות התקשרות setLongLived(true)
  • למקשי קיצור שקשורים לשיחות, שימוש בקיצור הדרך לדיווח להודעות יוצאות ונכנסות באמצעות פרסום מחדש של קיצורי הדרך התואמים עד ShortcutManagerCompat.pushDynamicShortcut. בקטע דיווח על שימוש בקיצור דרך לאפליקציות תקשורת לקבלת פרטים.
  • הימנעו משימוש ביעדי 'שיתוף ישיר' שאינם רלוונטיים או שאינם עדכניים. לדוגמה, אנשי קשר שהמשתמש לא שלח להם הודעה ב-30 הימים האחרונים.
  • באפליקציות SMS, מומלץ לא להוסיף קיצורי דרך לשיחות או למספרים קצרים תזוהה כתוכן שעשוי להיות ספאם. סביר מאוד שמשתמשים לא ישתפו עם השיחות האלה.
  • קוראים לפונקציה setCategories() כדי לשייך את קיצור הדרך אל מתאים mimeType . לדוגמה, לאפליקציית SMS, אם איש הקשר לא תומך ב-RCS או ב-MMS, לשייך את קיצור הדרך התואם לסוגי MIME שאינם טקסט, כמו image/* וגם video/*
  • בשיחה נתונה, אחרי שלוחצים על קיצור דרך דינמי והשימוש דווחו, אל תשנו את מזהה קיצור הדרך. כך אפשר לשמור את נתוני השימוש לדירוג.

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

API לשיתוף קיצורי דרך

החל מ-Android 10 (רמת API 29), נוספו שיטות ושיפורים על ידי ShortcutInfo.Builder שמספקים מידע נוסף על יעד השיתוף:

setCategories()
החל מ-Android 10, קטגוריות משמשות גם לסינון מקשי קיצור יכול לטפל בכוונות או בפעולות של שיתוף. למידע נוסף, אפשר לעיין בקטע הצהרה על מניה target לפרטים. שדה זה נדרש לקיצורי דרך אמורים לשמש כיעדי שיתוף.
setLongLived()

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

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

setShortLabel(), setLongLabel()

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

בקישור הבא תוכלו לראות דוגמה לפרסום קיצורי דרך לשיתוף ב-GitHub.

הוספת תמונות של קיצור דרך

כדי ליצור קיצור דרך לשיתוף צריך להוסיף תמונה דרך setIcon().

קיצורי הדרך לשיתוף יכולים להופיע בפלטפורמות המערכת, ואפשר לשנות את העיצוב שלהם. בנוסף, בחלק מהמכשירים פועלת בהם Android בגרסאות 7, 8 או 9 (רמות API 25, 26, 27 ו-28) עשויים להציג סמלים של מפת סיביות בלבד ללא רקע. מפחית משמעותית את הניגודיות. כדי להבטיח שקיצור הדרך ייראה כמו שצריך, לספק מפת סיביות מותאמת באמצעות IconCompat.createWithAdaptiveBitmap().

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

אין לספק תמונות המסוכות לצורה מסוימת. לדוגמה, לפני Android 10 (רמת API 29), היה נפוץ לספק דמויות של משתמשים לשיתוף ישיר ChooserTarget שכוננו בפני מעגל. הקובץ לשיתוף של Android ועוד בפלטפורמות המערכת של Android 10 יכולות עכשיו ליצור תמונות של קיצורי דרך ולעיצוב שלהן. השיטה המועדפת לספק קיצורי דרך לשיתוף, באמצעות ShortcutManagerCompat מעצבים באופן אוטומטי אובייקטי 'שיתוף ישיר' ChooserTarget של אובייקטים ל- במיוחד בשבילך.

הצהרה על יעד נתח

צריך להצהיר על יעדי שיתוף בקובץ המשאבים של האפליקציה, בדומה להגדרות של קיצורי דרך סטטיים. הוספת פרטי שותפות הגדרות טירגוט בתוך רכיב הבסיס <shortcuts> בקובץ המשאב, יחד עם הגדרות נוספות של קיצורי דרך סטטיות. כל רכיב <share-targets> מכילה מידע על סוג הנתונים ששותפו, הקטגוריות התואמות וגם מחלקה שתטפל בכוונת השיתוף. קוד ה-XML נראה משהו כך:

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity">
    <data android:mimeType="text/plain" />
    <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" />
  </share-target>
</shortcuts>

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

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

Action: Intent.ACTION_SEND
ComponentName: {com.example.android.sharingshortcuts /
                com.example.android.sharingshortcuts.SendMessageActivity}
Data: Uri to the shared content
EXTRA_SHORTCUT_ID: <ID of the selected shortcut>

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

דיווח על שימוש בקיצורי דרך באפליקציות תקשורת

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

קישורי שימוש ויכולות של קיצורי דרך תואמים לאחור ב-Android 5.0 (API 21).

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

השימוש בדיווח על הודעות שנשלחו על ידי המשתמש דומה מבחינה פונקציונלית לשימוש לחיצה על הלחצן "שליחה" אחרי יצירת הודעה.

כדי להפעיל דוחות שימוש, צריך לציין קישורי יכולות במקש הקיצור עד ShortcutInfoCompat.Builder#addCapabilityBinding עם היכולת actions.intent.SEND_MESSAGE.

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
.addCapabilityBinding("actions.intent.SEND_MESSAGE").build()
ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

Java

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE")
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

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

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", listOf("Audience")).build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

Java

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", Arrays.asList("Audience"))
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

דיווח על השימוש בקיצור דרך להודעות נכנסות

כדי להפעיל דיווח על השימוש כשהמשתמש מקבל הודעה כמו SMS, הודעות צ'אט, אימייל או התראות, יש לציין גם יכולת קישורים המופיעים במקש הקיצור הבא ShortcutInfoCompat.Builder#addCapabilityBinding עם את היכולת actions.intent.RECEIVE_MESSAGE.

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE").build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

Java

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE")
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

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

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", listOf("Audience")).build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

Java

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", Arrays.asList("Audience"))
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

שימוש ב-AndroidX כדי לספק קיצורי דרך לשיתוף וגם ChooserTargets

כדי שתהיה אפשרות לעבוד עם ספריית התאימות של AndroidX, המניפסט של האפליקציה חייב להכיל את קבוצת מסנני Intent ה-meta-data selectr-target-service ו-Intent-filter. צפייה ממשק ה-API הנוכחי של ChooserTargetService שיתוף ישיר.

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

בדוגמה הבאה, ההטמעה של ChooserTargetService היא androidx.core.content.pm.ChooserTargetServiceCompat, שכבר מוגדר ב-AndroidX:

<activity
    android:name=".SendMessageActivity"
    android:label="@string/app_name"
    android:theme="@style/SharingShortcutsDialogTheme">
    <!-- This activity can respond to Intents of type SEND -->
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <!-- Only needed if you import the sharetarget AndroidX library that
         provides backwards compatibility with the old DirectShare API.
         The activity that receives the Sharing Shortcut intent needs to be
         taken into account with this chooser target provider. -->
    <meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value="androidx.sharetarget.ChooserTargetServiceCompat" />
</activity>

שאלות נפוצות על שיתוף קיצורי דרך

איך מאוחסנים נתוני השימוש בקיצור הדרך והאם הם יוצאים מהמכשיר?

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

מהי ההיסטוריה של התכונה 'שיתוף ישיר'?

השקנו את התכונה 'שיתוף ישיר' ב-Android 6.0 (רמת API 23) כדי לאפשר לאפליקציות לספק אובייקטים של ChooserTarget דרך ChooserTargetService. התוצאות היו אחזור לפי דרישה לפי דרישה, מה שהוביל לזמני טעינה איטיים של המטרות.

ב-Android 10 (רמת API 29), החלפנו את מודל ישיר של ChooserTargetService שיתוף ממשקי API באמצעות ה-API החדש של Share Shortcuts API. במקום לאחזר תוצאות בהתאם לדרישה, API של קיצורי דרך לשיתוף מאפשר לאפליקציות לפרסם שיתוף ישיר יעדים מראש. הפעולה הזו האיצה במהירות את תהליך אחזור השיתוף הישיר בזמן הכנת הגיליון האלקטרוני של ShareSet. השיתוף הישיר ChooserTargetService המנגנון ימשיך לפעול, אבל המערכת מדרגת את היעדים שסופקו בדרך הזו נמוכה יותר מכל יעד שמשתמש ב-Share Shortcuts API.

מערכת Android 11 (רמת API 30) הוציאה משימוש את שירות ChooserTargetService, וגם השיתוף של קיצורי הדרך באמצעות ה-API הוא הדרך היחידה לספק יעדים של שיתוף ישיר.

מה ההבדל בין קיצורי הדרך שפורסמו ליעדי שיתוף למרכז האפליקציות קיצורי דרך (השימוש האופייני בקיצורי דרך כאשר לוחצים לחיצה ארוכה על סמלי אפליקציות מרכז האפליקציות)?

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

מהן ההנחיות לגבי מספר קיצורי הדרך לשיתוף שצריך לפרסם?

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