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ẻ trên 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 hình ả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 để chia sẻ.

Kể từ Chrome 86, Mục tiêu chia sẻ trên web 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 có thể hoạt động ngay từ đầu, 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. Những người đọc mới làm quen với công nghệ này có thể bắt đầu bằng Hướng dẫn tích hợp.

Tương tự, nội dung giải thích đầy đủ về cách triển khai Mục tiêu chia sẻ trên web trong PWA nằm ngoài phạm vi của bài viết này. Nhà phát triển có thể tìm 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. Bạn có thể xem mã nguồn của ứng dụng này trên GitHub. Ứ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 một ứng dụng hiện có dựa trên Hoạt động đáng tin cậy trên web nhằm triển khai Mục tiêu chia sẻ trên web, 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. 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 trên web biết thông tin chi tiết về nội dung chia sẻ mà ứng dụng hỗ trợ nhận, chẳng hạn như URL cần mở, phương thức sẽ sử dụng và loại MIME được hỗ trợ.

Việc này được thực hiện thông qua một tệp 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. Bạn phải thoát dấu ngoặc kép, vì vậy, mỗi " sẽ trở thành \".

Phần share_target của https://scrapbook-pwa.web.app/manifest.json sẽ có dạng như sau:

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

Bạn cần thực hiện 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ó 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 loại MIME mà ứng dụng có thể xử lý cho 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ư có thể thấy trong mã đánh dấu ở trên, bạn cần thêm một phần tử data cho mỗi mime-type được khai báo trong tệp 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 tích hợp sâu hơn các ứng dụng web tiến bộ bên trong một Hoạt động đáng tin cậy trên web 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, android-browser-helper giúp đơn giản hoá việc thêm mã đánh dấu cần thiết để hỗ trợ API trong một ứng dụng Android hiện có sử dụng Hoạt động web đáng tin cậy.

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 một tuỳ chọn khi tôi cố gắng 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 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, danh mục và mime-types chính xác do ứng dụng xử lý.

Ứng dụng của tôi xuất hiện dưới dạng một tuỳ chọn, PWA đã bắt đầu nhưng dữ liệu không được chia sẻ.

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

  • Đảm bảo rằng bạn đã xác thực thành công Đường liên kết đến tài sản kỹ thuật số.
  • Kiểm tra JSON bên trong strings.xml để đảm bảo tính chính xác.