Condivisione su dispositivi mobili e computer semplificata con l'API Web Share Target
Su un dispositivo mobile o desktop, la condivisione dovrebbe essere semplice quanto fare clic sul pulsante Condividi. scegliere un'app e scegliere con chi condividerla. Ad esempio, potresti voler condividere un articolo interessante, inviandolo via email agli amici o twittandolo nel mondo.
In passato, solo le app specifiche per le piattaforme potevano essere registrate nel sistema operativo per ricevono condivisioni da altre app installate. Con l'API Web Share Target, le app web installate possono essere registrate nel sistema operativo sottostante come target della condivisione per ricevere contenuti condivisi.
Guarda la funzione Web Share Target in azione
- Utilizzare Chrome 76 o versioni successive per Android oppure Chrome 89 o versioni successive desktop, apri la demo di Web Share Target.
- Quando richiesto, fai clic su Installa per aggiungere l'app alla schermata Home oppure usa il menu Chrome per aggiungerlo alla schermata Home.
- Apri un'app che supporti la condivisione o usa il pulsante Condividi nell'app demo.
- Dal selettore del target, scegli Test condivisione web.
Dopo la condivisione, dovresti vedere tutte le informazioni condivise in l'app web di destinazione della condivisione web.
Registrare l'app come target della condivisione
Per registrare la tua app come target di condivisione, deve soddisfare i requisiti di Chrome criteri di installabilità. Inoltre, prima che un utente possa condividere alla tua app, dovranno aggiungerla alla propria schermata Home. In questo modo, i siti si aggiunge in modo casuale al selettore di condivisione dell'intenzione dell'utente e garantisce che è qualcosa che gli utenti vogliono fare con la tua app.
Aggiorna il file manifest dell'app web
Per registrare la tua app come destinazione di condivisione, aggiungi una voce share_target
alla relativa pagina
del file manifest dell'app. Questo indica al sistema operativo di includere la tua app come
un'opzione nel selettore di intent. Ciò che aggiungi al file manifest controlla i dati
accettate dalla tua app. Esistono tre scenari comuni per share_target
voce:
- Accettazione delle informazioni di base
- Accettazione delle modifiche all'applicazione in corso...
- Accettazione file in corso...
Accettazione delle informazioni di base
Se la tua app target accetta semplicemente informazioni di base come dati, link,
e testo, aggiungi quanto segue al file manifest.json
:
"share_target": {
"action": "/share-target/",
"method": "GET",
"params": {
"title": "title",
"text": "text",
"url": "url"
}
}
Se la tua applicazione dispone già di uno schema URL di condivisione, puoi sostituire params
con i parametri di query esistenti. Ad esempio, se condividi l'URL
utilizza body
anziché text
, potresti sostituire "text": "text"
con "text":
"body"
.
Se non viene specificato, il valore predefinito di method
è "GET"
. Il campo enctype
, non
mostrato in questo esempio, indica il tipo di codifica dei dati.
Per il metodo "GET"
, il valore predefinito di enctype
è "application/x-www-form-urlencoded"
e
viene ignorato se è impostato su un altro valore.
Accettazione delle modifiche all'applicazione in corso...
Se i dati condivisi modificano in qualche modo l'app di destinazione, ad esempio salvando un
Aggiungi ai preferiti nell'applicazione di destinazione: imposta il valore method
su "POST"
e includi
il campo enctype
. L'esempio riportato di seguito crea un preferito nell'app di destinazione
quindi utilizza "POST"
per method
e "multipart/form-data"
per
enctype
:
{
"name": "Bookmark",
"share_target": {
"action": "/bookmark",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"url": "link"
}
}
}
Accettazione file in corso...
Come per le modifiche alla domanda, l'accettazione di file richiede che method
sia "POST"
e che enctype
sia presente. Inoltre, enctype
deve essere
"multipart/form-data"
e è necessario aggiungere una voce files
.
Devi inoltre aggiungere un array files
che definisce i tipi di file accettati dall'app. La
Gli elementi array sono voci con due membri: un campo name
e un accept
. Il campo accept
richiede un tipo MIME, un'estensione file o un array
che contengono entrambi. È meglio fornire un array che includa sia un
tipo MIME e estensione del file, poiché i sistemi operativi differiscono in base all'utilizzo
che preferiscono.
{
"name": "Aggregator",
"share_target": {
"action": "/cgi-bin/aggregate",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"title": "name",
"text": "description",
"url": "link",
"files": [
{
"name": "records",
"accept": ["text/csv", ".csv"]
},
{
"name": "graphs",
"accept": "image/svg+xml"
}
]
}
}
}
Gestire i contenuti in arrivo
Il modo in cui gestisci i dati condivisi in arrivo dipende da te e dipende dalla tua dell'app. Ad esempio:
- Un client di posta potrebbe creare la bozza di una nuova email utilizzando
title
come oggetto email, context
eurl
concatenati come corpo. - Un'app di social network può creare la bozza di un nuovo post ignorando
title
, utilizzandotext
come corpo del messaggio e aggiungereurl
come link. Setext
è mancante, l'app potrebbe anche utilizzareurl
nel corpo. Seurl
non è presente, l'app potrebbe eseguire la scansione ditext
cercando un URL e aggiungerlo come link. - Un'app di condivisione foto potrebbe creare una nuova presentazione utilizzando
title
come titolo della presentazione,text
come descrizione efiles
come immagini della presentazione. - Un'app di messaggistica potrebbe redigere la bozza di un nuovo messaggio utilizzando
text
eurl
concatenati e rilasciandotitle
.
Elaborazione delle condivisioni GET
Se l'utente seleziona la tua applicazione e il tuo method
è "GET"
(il
predefinita), il browser apre una nuova finestra all'URL action
. Il browser quindi
genera una stringa di query utilizzando i valori codificati nell'URL forniti nel manifest.
Ad esempio, se l'app di condivisione fornisce title
e text
, la stringa di query è
?title=hello&text=world
. Per elaborare questa operazione, utilizza un file DOMContentLoaded
listener di eventi nella pagina in primo piano e analizza la stringa di query:
window.addEventListener('DOMContentLoaded', () => {
const parsedUrl = new URL(window.location);
// searchParams.get() will properly handle decoding the values.
console.log('Title shared: ' + parsedUrl.searchParams.get('title'));
console.log('Text shared: ' + parsedUrl.searchParams.get('text'));
console.log('URL shared: ' + parsedUrl.searchParams.get('url'));
});
Assicurati di utilizzare un service worker per prememorizzare nella cache action
in modo che venga caricata rapidamente e funzioni in modo affidabile, anche se l'utente è offline.
Workbox è uno strumento che può aiutarti
implementare la pre-memorizzazione nella cache nel Service worker.
Elaborazione condivisioni POST in corso...
Se method
è "POST"
, come lo sarebbe se l'app target accettasse una richiesta salvata
preferiti o file condivisi, il corpo della richiesta POST
in arrivo contiene
i dati trasmessi dall'applicazione di condivisione, codificati utilizzando il valore enctype
fornite nel file manifest.
La pagina in primo piano non può elaborare direttamente questi dati. Poiché la pagina vede i dati come
una richiesta, la pagina la passa al service worker, dove puoi intercettarla con
fetch
listener di eventi. Da qui puoi ritrasmettere i dati in primo piano
utilizzando postMessage()
o passala al server:
self.addEventListener('fetch', event => {
const url = new URL(event.request.url);
// If this is an incoming POST request for the
// registered "action" URL, respond to it.
if (event.request.method === 'POST' &&
url.pathname === '/bookmark') {
event.respondWith((async () => {
const formData = await event.request.formData();
const link = formData.get('link') || '';
const responseUrl = await saveBookmark(link);
return Response.redirect(responseUrl, 303);
})());
}
});
Verifica dei contenuti condivisi
Assicurati di verificare i dati in arrivo. Purtroppo non possiamo garantire che altre le app condivideranno i contenuti appropriati con il parametro giusto.
Ad esempio, su Android, il campo url
sarà vuoto perché
non è supportato nel sistema di condivisione di Android. Al contrario, gli URL appariranno spesso
nel campo text
o occasionalmente nel campo title
.
Supporto browser
L'API Web Share Target è supportata come descritto di seguito:
Su tutte le piattaforme, è necessario che la tua app web sia installata prima di poter essere visualizzata come potenziale bersaglio per ricevere dati condivisi.
Applicazioni di esempio
Mostra il supporto per l'API
Intendi utilizzare l'API Web Share Target? Il tuo supporto pubblico aiuta il team di Chromium dare la priorità alle funzionalità e indica agli altri fornitori di browser quanto sia fondamentale supportarli.
Invia un tweet a @ChromiumDev utilizzando l'hashtag
#WebShareTarget
:
e facci sapere dove e come lo utilizzi.