![](https://developer.android.google.cn/static/training/sharing/direct-share-targets.png?authuser=9&hl=it)
Utilizza i target della condivisione diretta per rendere più semplice e veloce per gli utenti di altre app per condividere URL, immagini o altri tipi di dati con la tua app. Opere di Direct Share presentando i contatti dalle app di messaggistica e social direttamente su Android Sharesheet, senza che gli utenti debbano selezionare l'app e poi cercare il contatto.
ShortcutManagerCompat
è un'API AndroidX che fornisce scorciatoie per la condivisione,
compatibile con l'API ChooserTargetService
deprecata. È il metodo preferito
per pubblicare sia le scorciatoie di condivisione sia ChooserTargets
. Per istruzioni,
leggi l'articolo Utilizzare AndroidX per fornire scorciatoie di condivisione etargets
in questa pagina.
Pubblica target della condivisione diretta
La riga Condivisione diretta di Sharesheet mostra solo le scorciatoie dinamiche fornite API Share Shortcuts. Completa i seguenti passaggi per pubblicare la funzionalità Direct Share target.
Nel file di risorse XML dell'app, dichiara gli elementi
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>
Quando l'app viene inizializzata, usa
setDynamicShortcuts
per ordinare le scorciatoie dinamiche per importanza.Un indice più basso indica più importanza. Se fai una comunicazione possono essere le conversazioni principali, ordinate per data più recente, nel momento in cui appaiono la tua app. Non pubblicare scorciatoie obsolete. una conversazione senza L'attività utente negli ultimi 30 giorni è considerata inattiva.
Kotlin
ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))
Java
List<ShortcutInfoCompat> shortcuts = new ArrayList<>(); shortcuts.add(shortcut1); shortcuts.add(shortcut2); ... ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
Se stai sviluppando un'app di comunicazione, segnala l'utilizzo delle scorciatoie tramite
pushDynamicShortcut
immediatamente ogni volta che l'utente riceve o invia un messaggio a un contatto. Vedi Segnalare l'utilizzo delle scorciatoie per app di comunicazione in questa pagina per ulteriori informazioni. Ad esempio, segnala l'utilizzo dei messaggi inviati dall'utente tramite specificando le associazioni di funzionalità nella scorciatoiaShortcutInfoCompat.Builder#addCapabilityBinding
con la funzionalità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);
Se l'utente elimina un contatto, utilizza
removeLongLivedShortcut
È il metodo preferito per rimuovere la scorciatoia a prescindere dal fatto che sia memorizzata o meno nella cache dal sistema i servizi di machine learning. Il seguente snippet di codice mostra un esempio della procedura.Kotlin
val deleteShortcutId = "..." ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))
Java
String deleteShortcutId = "..."; ShortcutManagerCompat.removeLongLivedShortcuts( myContext, Arrays.asList(deleteShortcutId));
Migliorare i ranking dei target della condivisione diretta
Android Sharesheet mostra un numero fisso di target della condivisione diretta. Questi suggerimenti sono ordinati per ranking. Puoi potenzialmente migliorare il ranking del tuo procedendo nel seguente modo:
- Assicurati che tutti i
shortcutIds
siano univoci e non vengano mai riutilizzati per target diversi. - Assicurati che la scorciatoia abbia una lunga durata chiamando
setLongLived(true)
- Segnala l'utilizzo delle scorciatoie relative alle conversazioni
per i messaggi in uscita e in arrivo ripubblicando le scorciatoie corrispondenti
tramite
ShortcutManagerCompat.pushDynamicShortcut
. Vedi Segnalare l'utilizzo di scorciatoie per le app di comunicazione su questa app. pagina per informazioni dettagliate. - Evita di fornire target di condivisione diretta non pertinenti o inattivi, ad esempio contatti a cui l'utente non ha inviato messaggi negli ultimi 30 giorni.
- Per le app SMS, evita di fornire scorciatoie per codici brevi o conversazioni identificati come potenziali spam. È molto improbabile che gli utenti condividano conversazioni.
- Chiama
setCategories()
per associare la scorciatoia al appropriatomimeType
attributi. Ad esempio: per un'app SMS, se il contatto non è abilitato per RCS o MMS, non associare la scorciatoia corrispondente a tipi MIME non testuali comeimage/*
evideo/*
. - Per una data conversazione, una volta eseguito il push di una scorciatoia dinamica e l'utilizzo viene segnalato, non modificare l'ID della scorciatoia. Ciò garantisce la conservazione dei dati sull'utilizzo per il ranking.
Se l'utente tocca un target della condivisione diretta, l'app deve indirizzarlo a una UI in cui possono eseguire un'azione direttamente sull'oggetto del target. Non presentare all'utente una UI di disambiguazione e non collocarla in una UI non correlata obiettivo toccato. Ad esempio, in un'app di messaggistica, toccare una condivisione diretta target porta l'utente a una visualizzazione per conversazione con la persona selezionata. La sia visibile e il messaggio sia precompilato con i dati condivisi.
API Share Shortcuts
A partire da Android 10 (livello API 29),
ShortcutInfo.Builder
ha aggiunto metodi e miglioramenti
che forniscono informazioni aggiuntive sul target di condivisione:
setCategories()
- A partire da Android 10, le categorie vengono utilizzate anche per filtrare le scorciatoie che possono gestire intenzioni o azioni di condivisione. Vedi Dichiarare una condivisione target per maggiori dettagli. Questo campo è obbligatorio per le scorciatoie da utilizzare come target di condivisione.
setLongLived()
Specifica se una scorciatoia è valida o meno quando è stata annullata o resa invisibile dall'app (come scorciatoia dinamica o fissata). Se una scorciatoia dura a lungo, può essere memorizzata nella cache da vari servizi di sistema anche dopo la pubblicazione è stata annullata come scorciatoia dinamica.
Una scorciatoia di lunga durata può migliorarne il ranking. Vedi Il meglio per maggiori dettagli.
setShortLabel()
,setLongLabel()
Quando pubblichi una scorciatoia per una singola persona, includi il suo nome completo nome in
setLongLabel()
e qualsiasi nome breve, ad esempio un nickname o un nome nome, insetShortLabel()
.
Guarda un esempio di pubblicazione di scorciatoie di condivisione su GitHub.
Fornisci immagini delle scorciatoie
Per creare una scorciatoia di condivisione, devi aggiungere un'immagine tramite setIcon()
.
Le scorciatoie per la condivisione possono essere visualizzate su tutte le piattaforme di sistema e potrebbero essere rimodellate.
Inoltre, alcuni dispositivi con Android 7, 8 o 9 (livelli API 25,
26, 27 e 28) potrebbero visualizzare icone solo bitmap senza sfondo, che
riduce drasticamente il contrasto. Per assicurarti che la scorciatoia abbia l'aspetto previsto,
fornire una bitmap adattiva utilizzando IconCompat.createWithAdaptiveBitmap()
.
Assicurati che le bitmap adattive seguano le stesse linee guida e dimensioni impostate per le icone adattive. Il modo più comune per raggiungere questo obiettivo è scalare la bitmap quadrata prevista 72 x 72 dp e centra quello all'interno di una tela trasparente da 108 x 108 dp. Se la tua icona include aree trasparenti, devi includere un colore di sfondo; altrimenti le aree trasparenti appaiono nere.
Non fornire immagini mascherate in base a una forma specifica. Ad esempio, prima di
Android 10 (livello API 29), era comune fornire avatar degli utenti per Direct Share
ChooserTarget
mascherati in un cerchio. Android Sharesheet e altri
piattaforme di sistema in Android 10 ora sono immagini con scorciatoie per forma e tema.
Il metodo preferito per fornire scorciatoie di condivisione, tramite
ShortcutManagerCompat
,
plasma automaticamente gli oggetti con
condivisione diretta ChooserTarget
le cerchie per te.
Dichiara un target per la condivisione
Le destinazioni di condivisione devono essere dichiarate nel file di risorse dell'app, come per le definizioni delle scorciatoie statiche. Aggiungi condivisione
definizioni del target all'interno dell'elemento radice <shortcuts>
nel file di risorse,
insieme ad altre definizioni di scorciatoie statiche. Ogni elemento <share-targets>
contiene informazioni sul tipo di dati condivisi, sulle categorie corrispondenti e
target che gestirà l'intenzione di condivisione. Il codice XML ha un aspetto simile
nel seguente modo:
<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>
L'elemento dei dati in un target di condivisione è simile alla specifica dei dati in un filtro per intent. Ogni target di condivisione può avere più categorie, che vengono usate solo per corrispondere alle scorciatoie pubblicate di un'app con le relative definizioni di target di condivisione. Le categorie possono avere qualsiasi definizione arbitraria dell'app e i relativi valori.
Nel caso in cui l'utente selezioni la scorciatoia di condivisione in Android Sharesheet che corrisponde alla quota target di esempio riportata sopra, l'app riceverà quanto segue intenzione di condivisione:
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>
Se l'utente apre la destinazione della condivisione dalle scorciatoie Avvio app, l'app riceverà
l'intent creato durante l'aggiunta della scorciatoia di condivisione
ScorciatoiaManagerCompat.
Poiché è un intent diverso, Intent.EXTRA_SHORTCUT_ID
non sarà disponibile,
e dovrai passare manualmente l'ID, se necessario.
Segnala l'utilizzo delle scorciatoie per le app di comunicazione
Se stai sviluppando un'app di comunicazione, puoi migliorare il tuo ranking nella
Sharesheet di Android segnalando l'utilizzo dei messaggi sia in uscita che in arrivo.
Per farlo, ripubblica la scorciatoia della conversazione che rappresenta il contatto tramite
ShortcutManagerCompat.pushDynamicShortcut
L'utilizzo delle scorciatoie e le associazioni di funzionalità sono compatibili con le versioni precedenti di Android 5.0 (API 21).
Segnala l'utilizzo delle scorciatoie per i messaggi in uscita
L'utilizzo dei report per i messaggi inviati dall'utente è simile a facendo clic sul pulsante "Invia" dopo aver creato un messaggio.
Per attivare i report sull'utilizzo, specifica le associazioni di funzionalità nella scorciatoia
alla ShortcutInfoCompat.Builder#addCapabilityBinding
con la funzionalità 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);
Se il messaggio in uscita è per una chat di gruppo, devi aggiungere anche Audience
del parametro recipient
è associato alla funzionalità.
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);
Segnala l'utilizzo delle scorciatoie per i messaggi in arrivo
Per attivare i report sull'utilizzo quando l'utente riceve un messaggio, ad esempio un SMS:
messaggio di chat, email o notifiche, devi specificare anche
associazioni nella scorciatoia
ShortcutInfoCompat.Builder#addCapabilityBinding
con
la funzionalità 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);
Se il messaggio in arrivo proviene da una chat di gruppo, devi anche aggiungere Audience
come valore del parametro sender
è associato alla funzionalità.
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);
Utilizza AndroidX per fornire scorciatoie per la condivisione e target di selezione
Per poter funzionare con la libreria di compatibilità con AndroidX, il file manifest dell'app
deve contenere il servizio di scelta dei metadati e i filtri per intent. Consulta
l'attuale API ChooserTargetService
Direct Share.
Questo servizio è già dichiarato nella libreria di compatibilità, quindi l'utente lo non è necessario dichiarare il servizio nel file manifest dell'app. Tuttavia, il link da l'attività di condivisione con il servizio deve essere presa in considerazione come target del selettore o il provider di servizi di terze parti.
Nell'esempio seguente, l'implementazione di ChooserTargetService
è
androidx.core.content.pm.ChooserTargetServiceCompat
, già definito
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>
Domande frequenti sulle scorciatoie per la condivisione
Come vengono memorizzati i dati sull'utilizzo delle scorciatoie e quando lasciano il dispositivo?
Le scorciatoie vengono memorizzate interamente sul dispositivo nella directory dei dati di sistema in un la partizione del disco criptata. Le informazioni nelle scorciatoie, ad esempio icona, intent e i nomi di persone e risorse sono accessibili solo dai servizi di sistema e la stessa app che pubblica le scorciatoie.
Qual è la storia della funzionalità Direct Share?
Abbiamo introdotto la funzionalità Direct Share in Android 6.0 (livello API 23) per consentire alle app di
fornisce ChooserTarget
oggetti tramite un ChooserTargetService
. I risultati erano
recuperate in modo reattivo on demand, con conseguente rallentamento del tempo di caricamento dei target.
In Android 10 (livello API 29), abbiamo sostituito ChooserTargetService
Direct
Condividi le API con la nuova API Share Shortcuts. Invece di recuperare i risultati
in modo reattivo on demand, l'API Share Shortcuts consente alle app di pubblicare Direct Share
obiettivi in anticipo. Questo ha accelerato rapidamente il processo di recupero della condivisione diretta
durante la preparazione di ShareSheet. La quota diretta di ChooserTargetService
continuerà a funzionare, ma il sistema classifica gli obiettivi forniti
in questo modo inferiore rispetto a qualsiasi target che utilizzi l'API Sharing Shortcuts.
Android 11 (livello API 30) ha ritirato il servizio ChooserTargetService
.
L'API Share Shortcuts è l'unico modo per fornire destinazioni della Condivisione diretta.
Differenze delle scorciatoie pubblicate per i target di condivisione da Avvio app scorciatoie (l'utilizzo tipico delle scorciatoie quando si preme a lungo sulle icone delle app Avvio app)?
Qualsiasi scorciatoia pubblicata per una "condivisione di destinazione" è anche un'applicazione e verrà mostrata nel menu quando premi a lungo l'icona dell'app. La il limite massimo di scorciatoie per attività si applica anche al numero totale di comandi scorciatoie pubblicate da un'app (condivisione di target e scorciatoie precedenti in Avvio applicazioni combinati).
Quali sono le indicazioni sul numero di scorciatoie di condivisione da pubblicare?
Il numero di scorciatoie di condivisione è vincolato allo stesso limite delle scorciatoie dinamiche
scorciatoie disponibili tramite
getMaxShortcutCountPerActivity(android.content.Context)
È possibile pubblicare qualsiasi
numero massimo per questo limite, ma tieni presente che
le scorciatoie per la condivisione possono essere visibili
in Avvio applicazioni premi a lungo e nel foglio di condivisione. La maggior parte di Avvio applicazioni su
premere a lungo per visualizzare un massimo di quattro o cinque scorciatoie in modalità verticale e
otto in modalità Orizzontale. Visualizza
Domande frequenti
per ulteriori dettagli e indicazioni sulla condivisione delle scorciatoie.