![](https://developer.android.com/static/training/sharing/direct-share-targets.png?hl=he)
שימוש ביעדי 'שיתוף ישיר' כדי שיהיה קל ומהיר יותר למשתמשים באפליקציות אחרות כדי לשתף כתובות URL, תמונות או סוגים אחרים של נתונים עם האפליקציה. התכונה 'שיתוף ישיר' פועלת על ידי הצגת אנשי קשר מאפליקציות של העברת הודעות ושל רשתות חברתיות ישירות במכשיר ה-Android. שיתוף, בלי שהמשתמשים יצטרכו לבחור את האפליקציה ולחפש את איש הקשר.
ShortcutManagerCompat
הוא API של AndroidX שמספק קיצורי דרך לשיתוף,
תואמים ל-API של ChooserTargetService
שהוצא משימוש. זה המועדף
לפרסם גם קיצורי דרך לשיתוף וגם ChooserTargets
. לקבלת הוראות,
למידע נוסף, ראו שימוש ב-AndroidX כדי לספק קיצורי דרך לשיתוף ו-ChooserTargets
בדף הזה.
פרסום יעדים של שיתוף ישיר
בשורה Sharesheet Direct 'שיתוף ישיר' מוצגים רק קיצורי דרך דינמיים שסופקו על ידי שיתוף קיצורי דרך API. כדי לפרסם שיתוף ישיר, יש לפעול לפי השלבים הבאים יעדים.
בקובץ משאבי ה-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>
כשהאפליקציה מופעלת, צריך להשתמש ב-
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);
אם מפתחים אפליקציית תקשורת, אפשר לדווח על שימוש בקיצור דרך באמצעות
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);
אם המשתמש מוחק איש קשר, אפשר ללחוץ על
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)
אחד יכול לפרסם כל סוג
עד למגבלה הזו, אבל חשוב לזכור שקיצורי דרך לשיתוף יכולים להיות גלויים
במרכז האפליקציות, לוחצים לחיצה ארוכה ובגיליון השיתוף. רוב מרכזי האפליקציות מופעלים
בלחיצה ארוכה תציג עד ארבעה או חמישה קיצורי דרך בפריסה לאורך,
שמונה בפריסה לרוחב. לראות את זה
שאלות נפוצות
לקבלת פרטים נוספים והנחיות לשיתוף קיצורי דרך.