Ativar o destino de compartilhamento da Web na Atividade na Web confiável

O alvo de compartilhamento da Web permite que os PWAs recebam conteúdo compartilhado de outros apps instalados na o dispositivo. Esse recurso pode ser usado, por exemplo, por aplicativos como editores de imagens para receber uma imagem de um app de câmera ou de uma rede social para receber uma imagem ou um vídeo para compartilhamento.

A partir do Chrome 86, o Destino de compartilhamento na Web também está disponível para aplicativos que usam Atividade Confiável na Web. Embora o PWA funcione imediatamente, algumas mudanças são necessárias para Aplicativo Android.

Este artigo pressupõe que o desenvolvedor esteja familiarizado com as Atividades confiáveis na Web. Leitores que são novos a tecnologia pode começar com o Guia de integração.

Da mesma forma, há uma explicação completa da implementação do Destino de compartilhamento da Web em um PWA do Google Cloud, e os desenvolvedores podem encontrar mais informações neste artigo.

O aplicativo de demonstração em https://scrapbook-pwa.web.app/ será usado como PWA. artigo, e o código-fonte dele está disponível no GitHub, e o Aplicativo Android é baseado no a demonstração básica da Atividade confiável na Web.

Adicionar alvo de compartilhamento da Web ao app Android

Para modificar um aplicativo existente baseado em Atividade confiável na Web para implementar o compartilhamento na Web Alvo, são necessárias modificações em três arquivos diferentes:

build.gradle

A biblioteca android-browser-helper foi atualizada para oferecer suporte ao Web Share Target. Como primeira etapa, atualize o aplicativo para usar uma versão igual ou superior à 2.0.1.

dependencies {
    ...
    implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}

res/strings.xml

O aplicativo precisa informar à Atividade Confiável na Web os detalhes do compartilhamento compatível recebimento, como quais URLs abrir, o método a ser usado e tipos MIME compatíveis.

Isso é feito por meio de um JSON, disponibilizado para a Atividade na Web confiável com um recurso de string. A são os mesmos do campo share_target disponível no manifesto da Web e podem ser adicionados uma string dentro de strings.xml, quase como está, com duas observações importantes:

  1. O valor do atributo de ação precisa ser o URL completo, incluindo a origem.
  2. As aspas duplas precisam ter escape, então cada " se torna \".

Esta é a aparência da seção share_target de https://scrapbook-pwa.web.app/manifest.json. como:

{
  ...
  "share_target": {
    "action": "/_share-target",
    "enctype": "multipart/form-data",
    "method": "POST",
    "params": {
      "files": [{
        "name": "media",
        "accept": [
          "audio/*",
          "image/*",
          "video/*"
        ]
      }]
    }
  },
  ...
}

E o novo elemento de string será semelhante ao seguinte:

<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

Algumas mudanças são necessárias no manifesto do Android. Primeiro, precisamos garantir que DelegationService foi declarado, exportado e ativado.

Os desenvolvedores que criaram o aplicativo com base na demonstração básica já terão o serviço incluída, e a marcação deve estar dentro da tag do aplicativo e ter a seguinte aparência:

<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>

Por fim, dois novos itens precisam ser adicionados à tag de atividade LauncherActivity: - Uma tag meta-data que faz referência ao JSON definido em strings.xml. - Um intent-filter que declara quais tipos MIME o aplicativo pode gerenciar para outros no 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>

Como mostrado na marcação acima, um elemento data precisa ser adicionado para cada mime-type declarado. no JSON share_target.

Conclusão

A integração do Web Share Target permite que os PWAs dentro de uma Atividade confiável na Web sejam mais profundas integrado a outros aplicativos instalados em um dispositivo Android.

Conforme descrito nas etapas acima, a marcação adicional necessária para adicionar suporte para a API em uma um app Android que usa a Atividade Confiável na Web foi simplificado pelo android-browser-helper.

Confira o artigo Meta de compartilhamento da Web para saber mais sobre como usar a API em um PWA e as API Web Share para aprender a compartilhar conteúdo do Progressive Web App.

Solução de problemas

Meu aplicativo não aparece como opção quando tento compartilhar um arquivo de outro aplicativo.

Quando o aplicativo não aparece como uma opção, isso indica que o intent-filter está incorreto. Verifique se a marcação intent-filter contém as ações corretas. categoria de serviço e mime-types processados pelo aplicativo.

Meu aplicativo aparece como uma opção. O PWA é iniciado, mas os dados não são compartilhados.

Existem alguns fatores que podem causar isso. Esta é uma lista de verificação de itens a serem observados:

  • Confira se a validação do Digital Asset Links foi concluída.
  • Verifique se o JSON está correto em strings.xml.