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

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ụ: các ứng dụng như trình chỉnh sửa ảnh có thể sử dụng tính năng này để 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 nhằm chia sẻ.

Kể từ Chrome 86, Web Share Target hiện cũng có sẵn cho các ứng dụng sử dụng Hoạt động đáng tin cậy trên web. Mặc dù PWA sẽ hoạt động ngay từ đầu nhưng bạn vẫn cần thực hiện một vài thay đổ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 dùng công nghệ có thể bắt đầu với Hướng dẫn tích hợp.

Ngoài ra, phần giải thích đầy đủ về việc triển khai Mục tiêu chia sẻ web trong PWA cũng sẽ nằm ngoài 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 việc này bài viết và mã nguồn của bài viết đó có trên GitHub và Ứng dụng Android được 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ẻ 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 tính năng Chia sẻ web Mục tiêu, bạn cần sửa đổi 3 tệp khác nhau:

build.gradle

Thư viện android-browser-helper được cập nhật để hỗ trợ Mục tiêu chia sẻ web. Là một bước đầu tiên, 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 trên web biết chi tiết của hoạt động chia sẻ mà ứng dụng hỗ trợ nhận dữ liệu, chẳng hạn như URL nào cần mở, phương pháp sẽ sử dụng và các loại MIME được hỗ trợ.

Việc này được thực hiện qua JSON, được cung cấp cho Hoạt động đáng tin cậy trên web bằng tài nguyên chuỗi. Chiến lược phát hành đĩa đơn 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 ghi chú 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ó ký tự thoát, để mỗi " trở thành \".

Đây là giao diện của phần share_target trong https://scrapbook-pwa.web.app/manifest.json như:

{
  ...
  "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

Cần có một vài thay đổi trên Tệp kê khai Android. Trước tiên, chúng ta cần đảm bảo rằng DelegationService được khai báo, xuất và bật.

Những 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ụ bao gồm và đánh dấu phải nằm bên trong thẻ ứng dụng và trông giố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 của 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ý cho các loại 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ư có thể thấy trong phần đánh dấu ở trên, bạn phải 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 giúp các ứng dụng web tiến bộ (PWA) bên trong một Hoạt động đáng tin cậy trên web hoạt động sâu hơn tích hợp với các ứng dụng khác được cài đặt trên thiết bị Android.

Như đã mô tả trong các bước trên, bạn cần có mã đánh dấu bổ sung để 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 được android-browser-helper đơn giản hơn.

Hãy xem bài viết về Mục tiêu chia sẻ web để tìm hiểu thêm về cách sử dụng API trên PWA và API Chia sẻ web để 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, tức là intent-filter đang không chính xác. Kiểm tra kỹ mã đánh dấu intent-filter, đảm bảo mã đánh dấu đó chứa các hành động chính xác, và mime-types do ứng dụng xử lý.

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

Có một vài nguyên nhân 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:

  • Đảm bảo rằng quy trình xác thực Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) đã thành công.
  • Hãy kiểm tra JSON bên trong strings.xml để đảm bảo tính chính xác.