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

Cel udostępniania w internecie umożliwia aplikacjom PWA odbieranie treści udostępnianych z innych aplikacji zainstalowanych na urządzenia. Tej funkcji mogą używać na przykład aplikacje, takie jak edytory obrazów, do otrzymują zdjęcie z aplikacji aparatu lub z sieci społecznościowej, aby otrzymać obraz lub film do udostępnienia.

Od Chrome 86 usługa Web Share Target jest teraz dostępna również dla aplikacji, które używają Zaufana aktywność w internecie. Progresywna aplikacja internetowa powinna działać od razu, jednak trzeba wprowadzić kilka zmian, aby aplikacji na Androida.

W tym artykule zakładamy, że deweloper zna zaufane aktywności w internecie. Czytelnicy, którzy dopiero zaczynają korzystać z aby zacząć korzystać z technologii, skorzystaj z przewodnika po integracji.

Pełne wyjaśnienie wdrożenia celu udostępniania w internecie w progresywnej aplikacji internetowej znajduje się poza a deweloperzy mogą znaleźć więcej informacji w tym artykule.

Jako PWA będzie używana aplikacja w wersji demonstracyjnej https://scrapbook-pwa.web.app/. jego kod źródłowy jest dostępny na GitHub, a aplikacja na Androida opiera się podstawowej prezentacji Zaufanej aktywności w internecie.

Dodaj cel udostępniania w internecie do aplikacji na Androida

Modyfikowanie istniejącej aplikacji opartej na Zaufanej aktywności internetowej w celu wdrożenia Udostępniania w internecie Trzeba zmodyfikować 3 różne pliki docelowe:

build.gradle

Biblioteka android-browser-helper obsługuje teraz cel udostępniania w internecie. Jako Zaktualizuj aplikację, tak aby korzystała z wersji 2.0.1 lub nowszej.

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

res/strings.xml

Aplikacja musi przekazać do zaufanej aktywności internetowej szczegóły obsługiwanego udostępniania takie jak adresy URL do otworzenia, metodę do użycia i obsługiwane typy MIME.

Odbywa się to za pomocą pliku JSON udostępnianego zaufanej aktywności internetowej za pomocą zasobu w postaci ciągu znaków. są takie same jak pole share_target dostępne w pliku manifestu internetowego i można je dodać do ciąg znaków wewnątrz elementu strings.xml, niemal w takiej postaci, w jakiej jest, z dwoma ważnymi uwagami:

  1. Wartością atrybutu działania musi być pełny adres URL wraz ze źródłem.
  2. Aby znak " zmieniał się w \", trzeba zmienić znaczenie cudzysłowów.

Tak wygląda sekcja share_target w pliku https://scrapbook-pwa.web.app/manifest.json lubię:

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

Nowy element typu string będzie wyglądał tak:

<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

W pliku manifestu Androida trzeba wprowadzić kilka zmian. Najpierw musimy się upewnić, że Zadeklarowano, wyeksportowano i włączono interfejs DelegationService.

Deweloperzy, którzy stworzyli swoje aplikacje w oparciu o podstawową wersję demonstracyjną, już będą mieli dostęp do tej usługi. , a znaczniki powinny znajdować się w tagu aplikacji i wyglądać tak:

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

Wreszcie do tagu aktywności LauncherActivity należy dodać dwa nowe elementy: – tag meta-data, który odwołuje się do pliku JSON zdefiniowanego w string.xml. – intent-filter deklarujący, które typy MIME obsługuje aplikacja dla innych aplikacje na urządzeniu.

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

Jak widać w znacznikach powyżej, w przypadku każdego zadeklarowanego mime-type należy dodać element data w pliku JSON share_target.

Podsumowanie

Integracja celu udostępniania w internecie pozwala na głębsze wykorzystanie aplikacji PWA w zaufanej aktywności internetowej zintegrowane z innymi aplikacjami zainstalowanymi na urządzeniu z Androidem.

Jak opisano powyżej, dodatkowe znaczniki niezbędne do dodania obsługi interfejsu API w polu istniejąca aplikacja na Androida, która korzysta z zaufanej aktywności internetowej, została uproszczona przez android-browser-helper.

Zapoznaj się z artykułem na temat celu udostępniania w internecie, aby dowiedzieć się więcej o używaniu interfejsu API na PWA oraz Interfejs Web Share API, aby dowiedzieć się, jak udostępniać treści z progresywnej aplikacji internetowej.

Rozwiązywanie problemów

Gdy próbuję udostępnić plik z innej aplikacji, nie wyświetla się żadna opcja w mojej aplikacji.

Jeśli aplikacja nie jest widoczna jako opcja, oznacza to, że intent-filter jest niepoprawnie. Dokładnie sprawdź znacznik intent-filter. Upewnij się, że zawiera on prawidłowe działania. i mime-types obsługiwane przez aplikację.

Wyświetla się moja aplikacja, która jest uruchamiana, ale dane nie są udostępniane.

Może to wynikać z kilku przyczyn. Oto lista kontrolna, na którą warto zwrócić uwagę:

  • Upewnij się, że weryfikacja komponentu Digital Asset Links zakończyła się powodzeniem.
  • Sprawdź poprawność pliku JSON w string.xml.