Destinazione condivisione web consente alle PWA di ricevere contenuti condivisi da altre applicazioni installate sul dispositivo. Questa funzionalità può essere utilizzata, ad esempio, da applicazioni come gli editor di immagini per ricevere un'immagine da un'app fotocamera o da un social network per ricevere un'immagine o un video da condividere.
A partire da Chrome 86, la destinazione Condivisione web è ora disponibile anche per le applicazioni che utilizzano Attività web attendibile. Sebbene la PWA debba funzionare immediatamente, sono necessarie alcune modifiche all'applicazione Android.
Questo articolo presuppone che lo sviluppatore abbia dimestichezza con le attività web attendibili. I lettori che non hanno dimestichezza con la tecnologia possono iniziare consultando la Guida all'integrazione.
Nello stesso modo, una spiegazione completa dell'implementazione del target di condivisione web in una PWA non rientra nell'ambito e gli sviluppatori possono trovare ulteriori informazioni in questo articolo.
L'applicazione demo all'indirizzo https://scrapbook-pwa.web.app/ verrà utilizzata come PWA per questo articolo. Il codice sorgente è disponibile su GitHub e l'applicazione per Android si basa sulla demo di Attività web attendibile di base.
Aggiungere la destinazione di condivisione web all'app per Android
Per modificare un'applicazione basata su Attività web attendibile esistente in modo da implementare la destinazione Condivisione web, sono necessarie modifiche a tre diversi file:
build.gradle
La libreria android-browser-helper è stata aggiornata con il supporto di Destinazione condivisione web. Come primo passaggio, aggiorna l'applicazione in modo da utilizzare una versione maggiore o uguale a 2.0.1.
dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}
res/strings.xml
L'applicazione deve comunicare all'Attività web attendibile i dettagli della condivisione che supporta, ad esempio quali URL aprire, il metodo da utilizzare e i tipi MIME supportati.
Questo viene eseguito tramite un file JSON reso disponibile all'Attività web attendibile con una risorsa stringa. I campi sono gli stessi del campo share_target
disponibile nel file manifest web e possono essere aggiunti a una stringa all'interno di strings.xml
, quasi così come sono, con due note importanti:
- Il valore dell'attributo action deve essere l'URL completo, inclusa l'origine.
- Le virgolette doppie devono essere interpretate letteralmente, quindi ogni
"
diventa\"
.
Ecco come appare la sezione share_target
di https://scrapbook-pwa.web.app/manifest.json:
{
...
"share_target": {
"action": "/_share-target",
"enctype": "multipart/form-data",
"method": "POST",
"params": {
"files": [{
"name": "media",
"accept": [
"audio/*",
"image/*",
"video/*"
]
}]
}
},
...
}
Il nuovo elemento di stringa avrà il seguente aspetto:
<string name="share_target">
{
\"action\": \"https://twa-web-scrapbook.web.app/_share-target\",
\"method\": \"POST\",
\"enctype\": \"multipart/form-data\",
\"params\": {
\"files\": [{
\"name\": \"media\",
\"accept\": [\"image/*\", \"audio/*\", \"video/*\"]
}]
}
}
</string>
AndroidManifest.xml
Sono necessarie alcune modifiche in Android Manifest. Innanzitutto dobbiamo assicurarci che DelegationService
sia dichiarato, esportato e abilitato.
Gli sviluppatori che hanno creato la propria applicazione in base alla demo di base avranno già incluso il servizio e il markup dovrebbe trovarsi all'interno del tag dell'applicazione e avere il seguente aspetto:
<service
android:name="com.google.androidbrowserhelper.trusted.DelegationService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
Infine, è necessario aggiungere due nuovi elementi al tag attività LauncherActivity:
- Un tag meta-data
che fa riferimento al JSON definito in strings.xml.
- Un intent-filter
che dichiara i tipi MIME che l'applicazione è in grado di gestire per altre app sul dispositivo.
<meta-data
android:name="android.support.customtabs.trusted.METADATA_SHARE_TARGET"
android:resource="@string/share_target"/>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
Come si può vedere nel markup riportato sopra, è necessario aggiungere un elemento data
per ogni mime-type
dichiarato
nel JSON share_target
.
Conclusione
L'integrazione di Target di condivisione web consente di integrare più a fondo le PWA all'interno di un'Attività web attendibile con altre applicazioni installate su un dispositivo Android.
Come descritto nei passaggi precedenti, il markup aggiuntivo necessario per aggiungere il supporto dell'API in un'app Android esistente che utilizza l'Attività web attendibile è semplificato da android-browser-helper.
Consulta l'articolo Target di condivisione web per scoprire di più sull'utilizzo dell'API su una PWA e l'API Condivisione web per scoprire come condividere contenuti dall'app web progressiva.
Risoluzione dei problemi
La mia applicazione non viene visualizzata come opzione quando provo a condividere un file da un'altra applicazione.
Se l'applicazione non viene visualizzata come opzione, significa che intent-filter
è sbagliato. Controlla il markup intent-filter
, assicurati che contenga le azioni, la categoria e il mime-types
corretti gestiti dall'applicazione.
La mia applicazione viene visualizzata come opzione, la PWA viene avviata, ma i dati non vengono condivisi.
Esistono diversi motivi per cui questo può accadere. Ecco un elenco di controllo degli aspetti da esaminare:
- Assicurati che la convalida di Digital Asset Links sia andata a buon fine.
- Controlla la correttezza del JSON all'interno di strings.xml.