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à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, Web Share Target (Mục tiêu chia sẻ 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 sẽ hoạt động ngay khi bạn cài đặ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. Những độc giả 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ự, việc giải thích đầy đủ về cách triển khai Web Share Target (Mục tiêu chia sẻ 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 . 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 Web Share Target (Mục tiêu chia sẻ web) vào ứng dụng Android
Để sửa đổi ứ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 Web Share Target (Mục tiêu chia sẻ 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ợ Web Share Target (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 từ 2.0.1 trở lên.
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ề hoạt động chia sẻ mà ứng dụng hỗ trợ nhận, chẳng hạn như URL cần mở, phương thức cần sử dụng và các 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 vẹn, với 2 lưu ý quan trọng:
- Giá trị của thuộc tính action phải là URL đầy đủ, bao gồm cả nguồn gốc.
- Bạn phải thoát dấu ngoặc kép, vì vậy mỗi
"sẽ trở thành\".
Đây là cách phần share_target của https://googlechrome.github.io/samples/scrapbook-pwa/manifest.json trô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ẽ trô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 đối với Tệp kê khai Android. Trước tiên, bạn cần đảm bảo rằng 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à đánh dấu phải nằm trong thẻ ứng dụng và trô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 2 mục mới vào thẻ hoạt động LauncherActivity:
- Thẻ meta-data tham chiếu đến tệp JSON được xác định trong strings.xml.
- intent-filter khai báo các 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ư bạn có thể thấy trong đánh dấu ở trên, bạn nê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
Việc tích hợp Web Share Target (Mục tiêu chia sẻ web) cho phép PWA bên trong 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à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 đánh dấu bổ sung cần thiết để thêm tính năng hỗ trợ API trong ứng dụng Android hiện có sử dụng Hoạt động đáng tin cậy trên web.
Hãy xem bài viết Web Share Target (Mục tiêu chia sẻ web) để tìm hiểu thêm về cách sử dụng API trên PWA và Web Share API để 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 lựa 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 lựa chọn, điều này cho biết intent-filter không chính xác. Hãy kiểm tra kỹ đánh dấu intent-filter, đảm bảo đánh dấu này 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 lựa 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 vấn đề này. Sau đây là danh sách kiểm tra những điều cần xem xét:
- Đảm bảo quá 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.
- Kiểm tra tệp JSON bên trong strings.xml để đảm bảo tính chính xác.