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à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 mới sử dụng 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ẻ trên 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:
- Giá trị của thuộc tính hành động 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\"
.
Dưới đây là nội dung của phần share_target
trong 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
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ẻ trên 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 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 hiển thị 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 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 điều 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.