Bật mục tiêu chia sẻ web trong Hoạt động đáng tin cậy trên web

André Cipriani Bandarra
André Cipriani Bandarra

Web Share Target (Mục tiêu chia sẻ web) cho phép PWA nhận nội dung được chia sẻ từ các ứng dụng khác được cài đặt trên thiết bị. Ví dụ: bạn có thể sử dụng tính năng này cho các ứng dụng như trình chỉnh sửa hình ảnh để nhận hình ảnh từ ứng dụng máy ảnh hoặc mạng xã hội để nhận hình ảnh hoặc video để chia sẻ.

Kể từ Chrome 86, mục tiêu chia sẻ web hiện cũng áp dụng cho các ứng dụng sử dụng Hoạt động đáng tin cậy trên web. Mặc dù PWA hoạt động tốt, nhưng bạn cần thực hiện một vài thay đổi đối với Ứng dụng Android.

Bài viết này giả định rằng nhà phát triển đã quen thuộc với Hoạt động đáng tin cậy trên web. Độc giả mới làm quen với công nghệ này có thể bắt đầu sử dụng Hướng dẫn tích hợp.

Cũng vậy, nội dung giải thích đầy đủ về việc triển khai Mục tiêu chia sẻ web trong PWA nằm ngoài phạm vi và nhà phát triển có thể xem thêm thông tin trong bài viết này.

Ứng dụng minh hoạ tại https://scrapbook-pwa.web.app/ sẽ được dùng làm PWA cho bài viết này và mã nguồn của ứng dụng này có trên GitHub và Ứng dụng Android dựa trên bản minh hoạ cơ bản về Hoạt động đáng tin cậy trên web.

Thêm Mục tiêu chia sẻ trên web vào ứng dụng Android

Để sửa đổi ứng dụng dựa trên Hoạt động đáng tin cậy trên web hiện có nhằm triển khai Web Share Target (Mục tiêu chia sẻ web), bạn cần sửa đổi ba tệp khác nhau:

build.gradle

Thư viện android-Browser-helper đã được cập nhật với khả năng hỗ trợ cho Mục tiêu chia sẻ web. Bước đầu tiên, hãy cập nhật ứng dụng để sử dụng phiên bản cao hơn hoặc bằng 2.0.1.

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

res/strings.xml

Ứng dụng cần cho Hoạt động đáng tin cậy biết chi tiết về hoạt động chia sẻ mà ứng dụng hỗ trợ nhận, chẳng hạn như URL nào cần mở, phương thức được sử dụng và loại MIME được hỗ trợ.

Việc này được thực hiện thông qua một JSON, được cung cấp cho Hoạt động đáng tin cậy trên web bằng một tài nguyên chuỗi. Các trường này giống với trường share_target có trong Tệp kê khai web và có thể được thêm vào một chuỗi bên trong strings.xml, gần như nguyên trạng, với hai lưu ý quan trọng:

  1. Giá trị của thuộc tính hành động phải là URL đầy đủ, bao gồm cả nguồn gốc.
  2. Dấu ngoặc kép phải được thoát, do đó mỗi " trở thành \".

Đây là giao diện của phần share_target của 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/*"
        ]
      }]
    }
  },
  ...
}

Và phần tử chuỗi mới sẽ có dạng như sau:

<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

Một số thay đổi cần được thực hiện trên Tệp kê khai Android. Trước tiên, chúng ta cần đảm bảo DelegationService được khai báo, xuất và bật.

Các nhà phát triển xây dựng ứng dụng dựa trên bản minh hoạ cơ bản sẽ có sẵn dịch vụ này và mã đánh dấu sẽ nằm bên trong thẻ ứng dụng và có dạng như sau:

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

Cuối cùng, bạn cần thêm hai mục mới vào thẻ hoạt động LauncherActivity: – Thẻ meta-data tham chiếu đến JSON được xác định trong strings.xml. – intent-filter khai báo những loại MIME mà ứng dụng có thể xử lý đối với các ứng dụng khác trên thiết bị.

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

Như bạn có thể thấy trong mã đánh dấu ở trên, bạn cần thêm phần tử data cho mỗi mime-type được khai báo trong JSON share_target.

Kết luận

Tính năng tích hợp Mục tiêu chia sẻ trên web cho phép PWA trong một Hoạt động đáng tin cậy trên web được tích hợp sâu hơn với các ứng dụng khác được cài đặt trên thiết bị Android.

Như đã mô tả ở các bước ở trên, mã đánh dấu bổ sung cần thiết để thêm tính năng hỗ trợ cho API trong một ứng dụng Android hiện có sử dụng Hoạt động đáng tin cậy trên web sẽ được trình trợ giúp android-browser-helper đơn giản hoá hơn.

Hãy xem bài viết về Mục tiêu của tính năng Chia sẻ web để tìm hiểu thêm về cách sử dụng API trên PWA và API Chia sẻ web nhằm tìm hiểu cách chia sẻ nội dung từ Ứng dụng web tiến bộ.

Khắc phục sự cố

Ứng dụng của tôi không xuất hiện dưới dạng tuỳ chọn khi tôi cố chia sẻ tệp từ một ứng dụng khác.

Khi ứng dụng không xuất hiện dưới dạng một tuỳ chọn, điều này cho biết intent-filter không chính xác. Kiểm tra kỹ mã đánh dấu intent-filter, đảm bảo mã này chứa các thao tác, danh mục và mime-types chính xác mà ứng dụng xử lý.

Ứng dụng của tôi hiển thị dưới dạng một lựa chọn, PWA đã khởi động, nhưng dữ liệu không được chia sẻ.

Có một vài điều có thể gây ra điều này. Dưới đây là danh sách kiểm tra gồm những điều cần xem xét:

  • Đảm bảo xác thực thành công Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số).
  • Kiểm tra JSON bên trong strings.xml để biết độ chính xác.