![](https://developer.android.google.cn/static/training/sharing/direct-share-targets.png?authuser=9&hl=de)
Mit Direct Share-Zielen können Sie dies für Nutzer anderer Apps einfacher und schneller machen. um URLs, Bilder oder andere Daten mit Ihrer App zu teilen. Direct Share funktioniert indem Sie Kontakte aus Messaging- und sozialen Apps direkt auf dem Android-Gerät Sharesheet, ohne dass Nutzer die App auswählen und dann nach dem Kontakt suchen müssen.
ShortcutManagerCompat
ist eine AndroidX-API, die Freigabeverknüpfungen bietet.
kompatibel mit der verworfenen ChooserTargetService
API. Dies ist die bevorzugte
um sowohl die Freigabeverknüpfungen als auch ChooserTargets
zu veröffentlichen. Eine Anleitung dazu finden Sie
Siehe AndroidX verwenden, um sowohl Freigabeverknüpfungen als auch ChooserTargets bereitzustellen.
auf dieser Seite.
Direct Share-Ziele veröffentlichen
In der Zeile „Sharesheet Direct Share“ werden nur dynamische Verknüpfungen angezeigt, die vom Sharing Shortcuts API. Führe die folgenden Schritte aus, um Direct Share zu veröffentlichen. Ziele.
Deklariere in der XML-Ressourcendatei deiner App
share-target
-Elemente.<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>
Verwende beim Initialisieren deiner App
setDynamicShortcuts
. um dynamische Verknüpfungen nach Wichtigkeit zu sortieren.Ein niedrigerer Index weist auf eine höhere Bedeutung hin. Wenn Sie eine Kommunikation können Top-Unterhaltungen nach Aktualität sortiert werden, für Ihre App. Veröffentlichen Sie keine veralteten Verknüpfungen. eine Unterhaltung ohne Nutzeraktivitäten der letzten 30 Tage gelten als veraltet.
Kotlin
ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))
Java
List<ShortcutInfoCompat> shortcuts = new ArrayList<>(); shortcuts.add(shortcut1); shortcuts.add(shortcut2); ... ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
Wenn Sie eine Kommunikations-App entwickeln, melden Sie die Nutzung von Verknüpfungen über
pushDynamicShortcut
jedes Mal, wenn der Nutzer Nachrichten empfangen oder an einen Kontakt senden. Weitere Informationen finden Sie unter Nutzung von Kurzbefehlen melden für Kommunikations-Apps auf dieser Seite finden Sie weitere Informationen. Beispielsweise können Sie die Nutzung für Nachrichten melden, die der Nutzer per E-Mail gesendet hat. die Funktionsbindungen im Kurzbefehl durchShortcutInfoCompat.Builder#addCapabilityBinding
mit deractions.intent.SEND_MESSAGE
-Funktion.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);
Wenn der Nutzer einen Kontakt löscht, verwenden Sie
removeLongLivedShortcut
Dies ist die bevorzugte Möglichkeit, die Verknüpfung zu entfernen, unabhängig davon, ob sie vom System im Cache gespeichert wird . Das folgende Code-Snippet zeigt ein Beispiel, wie dies funktioniert.Kotlin
val deleteShortcutId = "..." ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))
Java
String deleteShortcutId = "..."; ShortcutManagerCompat.removeLongLivedShortcuts( myContext, Arrays.asList(deleteShortcutId));
Ranking der Direct Share-Ziele verbessern
Das Android Sharesheet zeigt eine feste Anzahl von Direct Share-Zielen an. Diese werden nach Rang sortiert. Sie können das Ranking Ihrer Tastenkombinationen aufrufen:
- Achten Sie darauf, dass alle
shortcutIds
eindeutig sind und niemals für unterschiedliche Ziele wiederverwendet werden. - Stellen Sie sicher, dass die Verknüpfung langlebig ist, indem Sie Folgendes aufrufen:
setLongLived(true)
- Nutzung von Tastenkombinationen in Bezug auf Unterhaltungen melden
für ausgehende und eingehende Nachrichten, indem Sie die entsprechenden Verknüpfungen neu veröffentlichen
bis
ShortcutManagerCompat.pushDynamicShortcut
. Weitere Informationen finden Sie unter Nutzung von Kurzbefehlen für Kommunikations-Apps melden . - Vermeiden Sie irrelevante oder veraltete Direct Share-Ziele, z. B. Kontakte, denen der Nutzer in den letzten 30 Tagen keine Nachricht gesendet hat
- Geben Sie bei SMS-Apps keine Kurzcodes für Kurzcodes oder Unterhaltungen an als potenzieller Spam identifiziert werden. Es ist sehr unwahrscheinlich, dass Nutzer etwas teilen diese Gespräche.
- Rufen Sie
setCategories()
auf, um die Verknüpfung mit dem passendmimeType
Attribute enthalten. Beispiel: für eine SMS-App: Wenn der Kontakt nicht RCS oder MMS unterstützt, wird die Verknüpfen Sie die entsprechende Verknüpfung mit Nicht-Text-MIME-Typen wieimage/*
undvideo/*
. - Sobald eine dynamische Verknüpfung gesendet wurde und die Nutzung geändert wird, ändern Sie die Verknüpfungs-ID nicht. Dadurch wird die Aufbewahrung von Nutzungsdaten sichergestellt für das Ranking.
Wenn der Nutzer auf ein Direct Share-Ziel tippt, muss er von Ihrer App zu einer Benutzeroberfläche weitergeleitet werden, kann er eine Aktion direkt gegenüber dem Ziel ausführen. Nicht präsentieren Nutzenden eine Begriffsbegründung angezeigt und platzieren Sie sie nicht in einer Benutzeroberfläche, die nichts mit dem Ziel angetippt. Wenn Sie z. B. in einer Messaging-App auf eine Direktfreigabe tippen, -Ziel leitet den Nutzer zu einer Konversationsansicht mit der ausgewählten Person weiter. Die Bildschirmtastatur sichtbar und die Nachricht ist mit den geteilten Daten vorausgefüllt.
Freigabe Shortcuts API
Ab Android 10 (API-Level 29)
Methoden und Verbesserungen für ShortcutInfo.Builder
hinzugefügt
mit zusätzlichen Informationen zum Freigabeziel:
setCategories()
- Ab Android 10 werden Kategorien auch verwendet, um Tastenkombinationen zu filtern, die Share-Intents oder -Aktionen verarbeiten kann. Weitere Informationen finden Sie unter Freigaben deklarieren target. Dieses Feld ist für Tastenkombinationen erforderlich die als gemeinsame Ziele gedacht sind.
setLongLived()
Gibt an, ob eine Tastenkombination gültig ist, wenn ihre Veröffentlichung aufgehoben wurde, oder durch die App unsichtbar gemacht werden (als dynamische oder angepinnte Verknüpfung). Wenn eine Verknüpfung langlebig ist, können sie von verschiedenen Systemdiensten im Cache gespeichert werden, selbst nachdem sie die Veröffentlichung als dynamische Verknüpfung aufgehoben.
Wenn Sie eine Verknüpfung langlebiger machen, kann sich das Ranking verbessern. Weitere Informationen finden Sie unter Das Beste erhalten finden Sie weitere Informationen.
setShortLabel()
,setLongLabel()
Wenn Sie eine Verknüpfung für eine einzelne Person veröffentlichen, geben Sie bitte deren vollständige Name auf
setLongLabel()
und ein beliebiger Kurzname, z. B. ein Spitzname oder Vorname Name insetShortLabel()
.
Ein Beispiel für die Veröffentlichung von Freigabeverknüpfungen auf GitHub
Bilder für Kurzbefehle bereitstellen
Wenn du eine Verknüpfung zum Teilen erstellen möchtest, musst du über setIcon()
ein Bild hinzufügen.
Verknüpfungen zum Teilen können auf allen Systemoberflächen angezeigt und neu gestaltet werden.
Außerdem können einige Geräte mit Android-Versionen 7, 8 oder 9 (API-Level 25,
26, 27 und 28) zeigen möglicherweise reine Bitmap-Symbole ohne Hintergrund an, was
den Kontrast erheblich verringert. Damit die Verknüpfung wie gewünscht aussieht,
stellen Sie mit IconCompat.createWithAdaptiveBitmap()
eine adaptive Bitmap bereit.
Achten Sie darauf, dass adaptive Bitmaps denselben Richtlinien und Abmessungen für adaptive Symbole entsprechen. Die am häufigsten verwendete Methode besteht darin, die beabsichtigte quadratische Bitmap 72 x 72 dp und mittig auf einer transparenten Canvas mit 108 x 108 dp. Wenn Ihr Symbol transparente Bereiche enthält, müssen Sie eine Hintergrundfarbe hinzufügen. Andernfalls Transparente Bereiche erscheinen schwarz.
Stellen Sie keine Bilder bereit, die in einer bestimmten Form maskiert sind. Bevor Sie beispielsweise
Unter Android 10 (API-Level 29) wurden häufig Avatare für Direct Share bereitgestellt.
ChooserTarget
s, die zu einem Kreis maskiert wurden. Das Android Sharesheet und andere
Auf den Systemoberflächen in Android 10 werden jetzt Kurzbefehle für Formen und Designs angezeigt.
Die bevorzugte Methode zum Bereitstellen von Verknüpfungen zum Teilen über
ShortcutManagerCompat
,
Direct Share ChooserTarget
-Objekte von Backcompat werden automatisch in
für Sie zu erstellen.
Freigabeziel deklarieren
Freigabeziele müssen in der Ressourcendatei der App deklariert werden, ähnlich wie bei den Definitionen statischer Tastenkombinationen. Freigabe hinzufügen
Zieldefinitionen im <shortcuts>
-Stammelement der Ressourcendatei
sowie andere statische Kurzbefehle. Jedes <share-targets>
-Element
enthält Informationen zum freigegebenen Datentyp, zu übereinstimmenden Kategorien und
Zielklasse, die den Freigabe-Intent verarbeitet. Der XML-Code sieht
wie hier:
<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>
Das Datenelement in einem Ziel für die gemeinsame Nutzung ähnelt der Datenspezifikation in einem Intent-Filter. Jedes Freigabeziel kann Mehrere Kategorien, die nur für die veröffentlichten Kurzbefehle einer App verwendet werden mit seinen Share-Target-Definitionen. Kategorien können beliebige App-Definitionen haben Werte.
Für den Fall, dass der Nutzer im Android-Sharesheet die Verknüpfungsverknüpfung auswählt, die mit dem obigen Beispiel für den Zielanteil übereinstimmt, erhält die App Folgendes: Share Intent:
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>
Wenn der Nutzer das Freigabeziel über die Verknüpfungen im Launcher öffnet, erhält die App
Intent erstellt, der beim Hinzufügen der Verknüpfungsverknüpfung zum
ShortcutManagerCompat auf.
Da es sich um einen anderen Intent handelt, ist Intent.EXTRA_SHORTCUT_ID
nicht verfügbar.
und Sie müssen die ID bei Bedarf manuell übergeben.
Nutzung von Kurzbefehlen für Kommunikations-Apps melden
Wenn Sie eine Kommunikations-App entwickeln, können Sie Ihr Ranking in der
Android Sharesheet, indem die Nutzung sowohl für ausgehende als auch für eingehende Nachrichten gemeldet wird.
Veröffentlichen Sie dazu die Verknüpfungsverknüpfung für die Unterhaltung, die den Kontakt repräsentiert, erneut über
ShortcutManagerCompat.pushDynamicShortcut
Die Nutzung von Verknüpfungen und Funktionsbindungen ist abwärtskompatibel zu Android 5.0 (API 21)
Nutzung von Kurzbefehlen für ausgehende Nachrichten melden
Die Verwendung der Berichterstellung für vom Nutzer gesendete Nachrichten ähnelt funktionell der auf „Senden“ klicken, nachdem Sie eine Nachricht erstellt haben.
Wenn Sie Nutzungsberichte auslösen möchten, geben Sie in der Verknüpfung Funktionsbindungen an
bis ShortcutInfoCompat.Builder#addCapabilityBinding
mit der actions.intent.SEND_MESSAGE
-Funktion.
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);
Wenn sich die ausgehende Nachricht auf einen Gruppenchat bezieht, musst du auch die Audience
hinzufügen
recipient
-Parameter
-Typ mit der Capability verknüpft ist.
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);
Nutzung von Kurzbefehlen für eingehende Nachrichten melden
Um Nutzungsberichte auszulösen, wenn der Nutzer eine Nachricht erhält, z. B. eine SMS,
Chatnachricht, E-Mail oder Benachrichtigungen gesendet werden, müssen Sie zusätzlich die Funktion angeben.
Bindungen in der Verknüpfung durch
ShortcutInfoCompat.Builder#addCapabilityBinding
mit
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);
Wenn die eingehende Nachricht aus einem Gruppenchat stammt, musst du auch die Audience
hinzufügen
Parameterwert als sender
-Typ festlegen
mit der Capability verbunden ist.
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 verwenden, um sowohl Freigabeverknüpfungen als auch ChooserTargets bereitzustellen
Damit Sie mit der AndroidX-Kompatibilitätsbibliothek arbeiten können, muss das Manifest der App
muss den Metadaten-Auswahldienst und Intent-Filter enthalten. Weitere Informationen finden Sie unter
die aktuelle ChooserTargetService
Direct Share API.
Dieser Dienst ist bereits in der Kompatibilitätsbibliothek deklariert, also tut der Nutzer Der Dienst muss nicht im Manifest der App deklariert werden. Der Link von Die Freigabeaktivität für den Dienst muss als Auswahlziel berücksichtigt werden. Dienstanbieter.
Im folgenden Beispiel ist die Implementierung von ChooserTargetService
androidx.core.content.pm.ChooserTargetServiceCompat
, die bereits definiert ist
in 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>
Häufig gestellte Fragen zum Teilen von Verknüpfungen
Wie werden die Nutzungsdaten der Verknüpfung gespeichert und verlassen sie das Gerät?
Verknüpfungen werden vollständig auf dem Gerät im Systemdatenverzeichnis in einem die verschlüsselte Laufwerkpartition. Informationen in Kürzeln wie Symbol, Intent, und Namen von Personen und Ressourcen sind nur für Systemdienste und die die Verknüpfungen veröffentlicht.
Was ist der bisherige Verlauf von Direct Share?
Wir haben die Funktion „Direct Share“ in Android 6.0 (API-Level 23) eingeführt, damit Apps
ChooserTarget
-Objekte über ChooserTargetService
bereitstellen. Die Ergebnisse waren
reaktiv bei Bedarf abgerufen, was zu einer langsamen Ladezeit für Ziele führt.
In Android 10 (API-Level 29) haben wir die ChooserTargetService
Direct ersetzt
Teile APIs mit der neuen Sharing Shortcuts API. Anstatt Ergebnisse abzurufen,
Mit der Sharing Shortcuts API können Apps reaktiv on demand Direct Share veröffentlichen.
im Voraus festzulegen. Dadurch wurde das Abrufen von Direct Share schnell beschleunigt
für die Erstellung von ShareSheet. Die ChooserTargetService
Direct Share
funktioniert zwar weiterhin, aber das System
sortiert die bereitgestellten Ziele
als jedes Ziel, das die Sharing Shortcuts API verwendet.
Android 11 (API-Level 30) hat den ChooserTargetService
-Dienst eingestellt und
Die Sharing Shortcuts API ist die einzige Möglichkeit, Direct Share-Ziele anzugeben.
Wie unterscheiden sich veröffentlichte Verknüpfungen für Freigabeziele vom Launcher Tastenkombinationen (die typische Verwendung von Tastenkombinationen beim langen Drücken von App-Symbolen in Launcher)?
Alle für ein „Ziel teilen“ veröffentlichte Verknüpfungen ist auch ein Launcher, Verknüpfung und wird im Menü angezeigt, wenn du lange auf das App-Symbol drückst. Die Die maximale Anzahl an Kurzbefehlen pro Aktivität gilt auch für die Gesamtzahl der Verknüpfungen, die eine App veröffentlicht (Ziele teilen und alte Launcher-Verknüpfungen kombiniert).
Wie viele Tastenkombinationen zum Teilen sollte veröffentlicht werden?
Die Anzahl der Tastenkombinationen zum Teilen ist auf dieselbe
Tastenkombinationen verfügbar über
getMaxShortcutCountPerActivity(android.content.Context)
Jeder kann beliebige
können Sie diese Beschränkung nicht überschreiten.
Beachten Sie jedoch, dass die Verknüpfungen
im App Launcher lange drücken und im Tabellenblatt zum Teilen. Die meisten App Launcher
werden durch langes Drücken im Hochformat maximal vier oder fünf Tastenkombinationen angezeigt.
Acht im Querformat. Ansehen
Häufig gestellte Fragen
.