Włącz cel udostępniania w internecie w zaufanej aktywności w internecie

Cel udostępniania w internecie umożliwia PWA otrzymywanie udostępnianych treści z innych aplikacji zainstalowanych na urządzeniu. Z tej funkcji mogą korzystać na przykład aplikacje do edycji zdjęć, aby odbierać obrazy z aplikacji aparatu, lub sieci społecznościowe, aby odbierać obrazy i filmy do udostępnienia.

Od wersji 86 Chrome docelowe udostępnianie w internecie jest dostępne również dla aplikacji korzystających z zaufanej aktywności w internecie. PWA powinna działać od razu, ale w aplikacji na Androida trzeba wprowadzić kilka zmian.

W tym artykule zakładamy, że deweloper zna zaufane działania w internecie. Czytelnicy, którzy nie znają tej technologii, mogą zacząć od przewodnika po integracji.

Podobnie pełne wyjaśnienie implementacji celu Udostępnianie przez Web w PWA wykracza poza zakres tego artykułu. Więcej informacji na ten temat znajdziesz w tym artykule.

W tym artykule jako PWA zostanie użyta aplikacja demonstracyjna https://scrapbook-pwa.web.app/. Jej kod źródłowy jest dostępny na GitHub, a aplikacja na Androida opiera się na podstawowym demonstracyjnym PWA Aktywności w zaufanym internecie.

Dodawanie do aplikacji na Androida celu udostępniania przez internet

Aby zmodyfikować istniejące aplikacje korzystające z zaufanej aktywności w internecie w celu implementacji celu udostępniania w internecie, musisz zmodyfikować 3 pliki:

build.gradle

Biblioteka android-browser-helper została zaktualizowana i obsługuje teraz cel udostępniania w przeglądarce. Najpierw zaktualizuj aplikację do wersji 2.0.1 lub nowszej.

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

res/strings.xml

Aplikacja musi przekazać zaufanej aktywności w sieci szczegóły dotyczące obsługiwanych funkcji udostępniania, takie jak adresy URL do otwierania, metodę do użycia i obsługiwane typy mime.

Jest to realizowane za pomocą obiektu JSON udostępnionego usłudze zaufana aktywność internetowa za pomocą zasobu ciągu znaków. Te pola są takie same jak pole share_target dostępne w pliku manifestu internetowego i można je dodać do ciągu w polu strings.xml, prawie w takiej samej formie. Należy jednak pamiętać o 2 ważnych kwestiach:

  1. Wartość atrybutu action musi być pełnym adresem URL, łącznie z pochodzeniem.
  2. Konieczne jest stosowanie znaku ucieczki przed podwójnym cudzysłowem, aby każdy element " był zapisywany jako \".

Sekcja share_target w pliku https://scrapbook-pwa.web.app/manifest.json wygląda tak:

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

Nowy element ciągu znaków będzie wyglądał tak:

<string name="share_ta>rget"
{
    \"action\": \"https://twa-web-scrapbook.web.app/_share-target\",
    \"method\": \"POST\",
    \"enctype\": \"multipart/form-data\",
    \"params\": {
      \"files\": [{
          \"nam<e\">;: \"media\",
          \"accept\": [\"image/*\", \"audio/*\", \"video/*\"]
      }]
    }
}
/string

AndroidManifest.xml

W pliku manifestu Androida należy wprowadzić kilka zmian. Najpierw musimy się upewnić, że element DelegationService został zadeklarowany, wyeksportowany i włączony.

Programiści, którzy stworzyli aplikację na podstawie podstawowego szablonu, będą już mieć uwzględnioną usługę. Tagowanie powinno znajdować się w tagu aplikacji i wyglądać tak:

<service
    android:name="com.google.androidbrowserhelper.trusted.DelegationService"
    android:enabled="true"
    and>roid:e<xported=">;true&quo<t;

    intent-filter
        action android:name="android.support.customtabs.tru>sted.TRUS<TED_WEB_ACTIVITY_SERVICE"/
        category android>:name<="android>.<intent.c>ategory.DEFAULT"/
    /intent-filter
/service

Do tagu aktywności LauncherActivity należy też dodać 2 nowe elementy: - tag meta-data, który odwołuje się do pliku JSON zdefiniowanego w pliku strings.xml; – intent-filter, który określa, jakie typy mime aplikacja może obsługiwać w przypadku innych aplikacji na urządzeniu.

<meta-data
    android:name="android.support.customtabs.trusted.METADATA_SHARE_TARGET"
    android:resource="@string>/s<hare_target&q>uot;/<

intent-filter
    action android:name="andr>oid.i<ntent.action.SEND" /
    action android:name="and>roid.<intent.action.SEND_MULTIPLE" /
    category android:>name=<"android.intent.category.DEF>AULT&<quot; /
    data android:mimeType>=&quo<t;audio/*" /
    data androi>d<:mimeType=&quo>t;image/*" /
    data android:mimeType="video/*" /
/intent-filter

Jak widać w powyższym znaczniku, do każdego elementu mime-type zadeklarowanego w pliku JSON share_target należy dodać element data.

Podsumowanie

Integracja z celami udostępniania w internecie umożliwia lepsze zintegrowanie aplikacji internetowych w ramach zaufanej aktywności w internecie z innymi aplikacjami zainstalowanymi na urządzeniu z Androidem.

Jak opisano powyżej, dodatkowy znacznik znaczeń potrzebny do dodania obsługi interfejsu API w dotychczasowej aplikacji na Androida, która korzysta z zaufanej aktywności w internecie, jest uproszczony przez pakiet android-browser-helper.

Aby dowiedzieć się więcej o używaniu interfejsu API w aplikacji Progressive Web App, przeczytaj artykuł o celu udostępniania treści w przeglądarce oraz artykuł o interfejsie Web Share API.

Rozwiązywanie problemów

Podczas udostępniania pliku z innej aplikacji moja aplikacja nie jest wyświetlana jako opcja.

Jeśli aplikacja nie jest widoczna jako opcja, oznacza to, że intent-filter jest nieprawidłowy. Sprawdź, czy znaczniki intent-filter zawierają prawidłowe działania, kategorię i mime-types obsługiwane przez aplikację.

Moja aplikacja jest widoczna jako opcja, PWA jest uruchomiona, ale dane nie są udostępniane.

Może się tak zdarzyć z kilku powodów. Oto lista kontrolna:

  • Sprawdź, czy weryfikacja Digital Asset Links zakończyła się sukcesem.
  • Sprawdź, czy plik JSON w pliku strings.xml jest poprawny.