Aktifkan Target Berbagi Web di Aktivitas Web Tepercaya

Target Berbagi Web memungkinkan PWA menerima konten yang dibagikan dari aplikasi lain yang diinstal di perangkat. Fitur ini dapat digunakan, misalnya, oleh aplikasi seperti editor gambar untuk menerima gambar dari aplikasi kamera, atau jaringan sosial untuk menerima gambar atau video untuk dibagikan.

Mulai Chrome 86, Target Berbagi Web kini juga tersedia untuk aplikasi yang menggunakan Aktivitas Web Tepercaya. Meskipun PWA akan berfungsi secara otomatis, beberapa perubahan diperlukan pada Aplikasi Android.

Artikel ini mengasumsikan bahwa developer sudah memahami Aktivitas Web Tepercaya. Pembaca yang baru menggunakan teknologi ini dapat memulai dengan Panduan Integrasi.

Demikian pula, penjelasan lengkap tentang penerapan Target Berbagi Web di PWA berada di luar cakupan dan developer dapat menemukan informasi selengkapnya di artikel ini.

Aplikasi demo di https://scrapbook-pwa.web.app/ akan digunakan sebagai PWA untuk artikel ini, dan kode sumbernya tersedia di GitHub, serta Aplikasi Android didasarkan pada demo Aktivitas Web Tepercaya dasar.

Menambahkan Target Berbagi Web ke aplikasi Android

Untuk mengubah aplikasi berbasis Aktivitas Web Tepercaya yang ada guna menerapkan Target Bagikan Web, diperlukan perubahan pada tiga file yang berbeda:

build.gradle

Library android-browser-helper telah diupdate dengan dukungan untuk Target Berbagi Web. Sebagai langkah pertama, update aplikasi untuk menggunakan versi yang lebih tinggi atau sama dengan 2.0.1.

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

res/strings.xml

Aplikasi harus memberi tahu Aktivitas Web Tepercaya detail berbagi yang didukungnya untuk menerima, seperti URL yang akan dibuka, metode yang akan digunakan, dan jenis mime yang didukung.

Hal ini dilakukan melalui JSON, yang disediakan untuk Aktivitas Web Tepercaya dengan resource string. Kolom ini sama dengan kolom share_target yang tersedia di Manifes Web dan dapat ditambahkan ke string di dalam strings.xml, hampir apa adanya, dengan dua catatan penting:

  1. Nilai atribut tindakan harus berupa URL lengkap, termasuk origin.
  2. Tanda kutip ganda harus di-escape, sehingga setiap " menjadi \".

Berikut tampilan bagian share_target dari 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/*"
        ]
      }]
    }
  },
  ...
}

Dan elemen string baru akan terlihat seperti berikut:

<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

Beberapa perubahan diperlukan pada Manifes Android. Pertama, kita perlu memastikan bahwa DelegationService dideklarasikan, diekspor, dan diaktifkan.

Developer yang mem-build aplikasi berdasarkan demo dasar akan menyertakan layanan dan markup harus berada di dalam tag aplikasi dan terlihat seperti berikut:

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

Terakhir, dua item baru perlu ditambahkan ke tag aktivitas LauncherActivity: - Tag meta-data yang mereferensikan JSON yang ditentukan dalam strings.xml. - intent-filter yang mendeklarasikan jenis mime yang dapat ditangani aplikasi ke aplikasi lain di perangkat.

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

Seperti yang dapat dilihat dalam markup di atas, elemen data harus ditambahkan untuk setiap mime-type yang dideklarasikan dalam JSON share_target.

Kesimpulan

Integrasi Target Berbagi Web memungkinkan PWA di dalam Aktivitas Web Tepercaya terintegrasi lebih mendalam dengan aplikasi lain yang diinstal di perangkat Android.

Seperti yang dijelaskan dalam langkah-langkah di atas, markup tambahan yang diperlukan untuk menambahkan dukungan bagi API di aplikasi Android yang ada dan menggunakan Trusted Web Activity menjadi lebih sederhana dengan android-browser-helper.

Lihat artikel Target Berbagi Web untuk mempelajari lebih lanjut penggunaan API di PWA dan Web Share API untuk mempelajari cara membagikan konten dari Progressive Web App.

Pemecahan masalah

Aplikasi saya tidak ditampilkan sebagai opsi saat saya mencoba membagikan file dari aplikasi lain.

Jika aplikasi tidak ditampilkan sebagai opsi, ini menunjukkan bahwa intent-filter salah. Periksa kembali markup intent-filter, pastikan markup tersebut berisi tindakan, kategori, dan mime-types yang benar yang ditangani oleh aplikasi.

Aplikasi saya ditampilkan sebagai opsi, PWA dimulai, tetapi data tidak dibagikan.

Ada beberapa hal yang dapat menyebabkan hal ini. Berikut adalah checklist hal-hal yang perlu diperhatikan:

  • Pastikan validasi Digital Asset Links berhasil.
  • Periksa JSON di dalam strings.xml untuk mengetahui kebenarannya.