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

André Cipriani Bandarra
André Cipriani Bandarra

Cel udostępniania w internecie umożliwia aplikacjom PWA odbieranie treści udostępnionych z innych aplikacji zainstalowanych na urządzeniu. Z tej funkcji mogą korzystać na przykład aplikacje, takie jak edytory obrazów, aby pobierać zdjęcia z aplikacji aparatu, oraz sieci społecznościowe, aby otrzymywać obrazy lub filmy do udostępnienia.

Od Chrome 86 cel udostępniania w internecie jest teraz dostępny 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 programista zna zaufane działania w internecie. Czytelnicy, którzy nie mają doświadczenia z technologią, mogą zacząć korzystać z przewodnika po integracji.

Pełne wyjaśnienie implementacji celu udostępniania w sieci w PWA jest poza zakresem, a deweloperzy mogą znaleźć więcej informacji w tym artykule.

Aplikacja demonstracyjna dostępna pod adresem https://scrapbook-pwa.web.app/ zostanie użyta jako PWA w tym artykule, a jej kod źródłowy będzie dostępny w GitHub. Aplikacja na Androida bazuje na podstawowej prezentacji Zaufanej aktywności w internecie.

Dodaj cel udostępniania w internecie do aplikacji na Androida

Aby zmodyfikować istniejącą aplikację opartą na Zaufanej aktywności internetowej i wdrożyć cel udostępniania w internecie, wymagane są modyfikacje 3 różnych plików:

build.gradle

Biblioteka android-browser-helper została zaktualizowana o obsługę celu udostępniania w internecie. 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 internetowej szczegółowe informacje o udostępnianiu, które obsługuje, takie jak adresy URL, które należy otworzyć, użyte metody i obsługiwane typy MIME.

Można to zrobić za pomocą pliku JSON, który jest udostępniany w zaufanej aktywności internetowej za pomocą zasobu tekstowego. Pola są takie same jak pole share_target w pliku manifestu internetowym i można je dodać prawie w takiej postaci, w jakiej jest zawarte w ciągu znaków w pliku strings.xml, z 2 ważnymi uwagami:

  1. Wartość atrybutu działania musi być pełnym adresem URL razem ze źródłem.
  2. Podwójne cudzysłowy wymagają zmiany znaczenia, więc każdy element " zmienia się w \".

Tak wygląda sekcja share_target w 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/*"
        ]
      }]
    }
  },
  ...
}

A nowy element ciągu 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

Musisz wprowadzić kilka zmian w pliku manifestu Androida. Najpierw musimy się upewnić, że DelegationService jest zadeklarowany, wyeksportowany i włączony.

Deweloperzy, którzy stworzyli swoją aplikację w oparciu o podstawową wersję demonstracyjną, będą mieli już włączoną tę usługę, a znaczniki powinny się znajdować 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>

Na koniec należy dodać 2 nowe elementy do tagu aktywności LauncherActivity: – tag meta-data, który odwołuje się do kodu JSON zdefiniowanego w pliku string.xml. – intent-filter określa, które typy MIME aplikacja może obsłużyć w przypadku innych aplikacji 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ć powyżej w znacznikach, do każdego elementu mime-type zadeklarowanego w pliku JSON share_target należy dodać element data.

Podsumowanie

Integracja z celem udostępniania w internecie umożliwia ściślejszą integrację PWA w zaufanej aktywności internetowej z innymi aplikacjami zainstalowanymi na urządzeniu z Androidem.

Jak opisano w powyższych krokach, użycie dodatkowych znaczników potrzebnych do dodania obsługi interfejsu API w istniejącej aplikacji na Androida, która korzysta z zaufanej aktywności w internecie, jest upraszczane przez android-browser-helper.

Przeczytaj artykuł na temat celu udostępniania w internecie, aby dowiedzieć się więcej o korzystaniu z interfejsu API w progresywnej aplikacji internetowej oraz interfejsu 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, moja aplikacja nie wyświetla się jako opcja.

Jeśli aplikacji nie widać jako opcji, oznacza to, że intent-filter jest nieprawidłowy. Dokładnie sprawdź znaczniki intent-filter i upewnij się, że zawierają one prawidłowe działania, kategorię i element mime-types obsługiwane przez aplikację.

Jako opcja wyświetla się moja aplikacja PWA została uruchomiona, ale dane nie są udostępniane.

Może to być spowodowane kilkoma czynnikami. Oto lista kontrolna rzeczy, na które warto zwrócić uwagę:

  • Upewnij się, że weryfikacja Digital Asset Links zakończyła się powodzeniem.
  • Sprawdź, czy plik JSON w string.xml jest poprawny.