Tuỳ chọn cầu nối cho thông báo

Theo mặc định, thông báo được bắc cầu (chia sẻ) từ một ứng dụng trên điện thoại đến mọi đồng hồ đã ghép nối. Nếu bạn tạo một ứng dụng đồng hồ và ứng dụng của bạn cũng có trên một điện thoại đã ghép nối, thì người dùng có thể nhận được các thông báo trùng lặp — một thông báo do ứng dụng điện thoại (được bắc cầu) tạo ra và một thông báo do ứng dụng đồng hồ tạo ra. Wear OS có các tính năng để kiểm soát cách thức và thời điểm gửi thông báo.

Tránh thông báo trùng lặp

Khi bạn tạo thông báo từ một nguồn bên ngoài, chẳng hạn như qua Giải pháp gửi thông báo qua đám mây của Firebase, ứng dụng dành cho thiết bị di động và ứng dụng cho thiết bị đeo có thể hiển thị thông báo riêng của từng ứng dụng trên đồng hồ. Để tránh trường hợp trùng lặp này, ứng dụng dành cho thiết bị đeo của bạn phải được lập trình để tắt chế độ cầu nối.

1. Trong ứng dụng cho thiết bị di động, hãy sử dụng các thẻ cầu nối (nếu có)

Nếu bạn muốn bắc cầu một số thông báo được tạo trên ứng dụng dành cho thiết bị di động vào đồng hồ khi cài đặt ứng dụng cho thiết bị đeo, hãy thiết lập thẻ cầu nối.

Thiết lập thẻ cầu nối

Thiết lập thẻ cầu nối trên một thông báo bằng cách dùng phương thức setBridgeTag(String) như minh họa trong mã mẫu sau đây:

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(
        NotificationCompat.WearableExtender()
            .setBridgeTag("foo")
    )
    .build()

2. Trong ứng dụng cho thiết bị đeo, hãy tắt chế độ cầu nối

Tắt chế độ cầu nối cho một số thông báo

Bạn có thể linh động tắt chế độ cầu nối và lựa chọn cho phép một số thông báo, tuỳ thuộc vào thẻ của thông báo đó. Ví dụ: để tắt chế độ cầu nối cho tất cả các thông báo ngoại trừ những thông báo được gắn thẻ là foo, bar hoặc baz, hãy sử dụng đối tượng BridgingConfig như minh hoạ trong phần này.

BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, false)
        .addExcludedTags(listOf("foo", "bar", "baz"))
        .build()
)

Tắt chế độ cầu nối cho mọi thông báo (không khuyến nghị)

Lưu ý: Bạn không nên tắt chế độ cầu nối cho mọi thông báo vì cấu hình cầu nối được thiết lập trong tệp kê khai sẽ có hiệu lực ngay khi ứng dụng đồng hồ được cài đặt. Điều này có thể khiến thông báo bị mất nếu người dùng cần mở và thiết lập ứng dụng đồng hồ trước khi nhận thông báo.

Để tránh việc bắc cầu tất cả thông báo của một ứng dụng điện thoại, hãy dùng mục nhập <meta-data> trong tệp kê khai của ứng dụng đồng hồ, như trong ví dụ sau đây:

<application>
...
  <!-- Beware this can have unintended consqequences before the user is signed-in -->
  <meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />
...
</application>

Lưu ý: Việc chỉ định cấu hình cầu nối trong thời gian chạy sẽ ghi đè một chế độ cài đặt liên quan đến cầu nối trong tệp kê khai Android.

3. Đặt mã loại bỏ để đồng bộ hoá các thông báo tương tự trên Wear OS và thiết bị di động

Khi bạn ngăn việc bắc cầu với tính năng của chế độ cầu nối, thao tác loại bỏ thông báo sẽ không được đồng bộ hoá trên các thiết bị của người dùng.

Tuy nhiên, nếu bạn tạo các thông báo tương tự trên cả thiết bị di động lẫn đồng hồ, thì bạn vẫn cần loại bỏ cả hai thông báo nếu người dùng loại bỏ bất kỳ thông báo nào trong số hai thông báo này.

Trong NotificationCompat.WearableExtender, bạn có thể đặt một mã nhận dạng chung duy nhất để khi một thông báo bị loại bỏ, những thông báo khác có cùng mã nhận dạng trên (các) đồng hồ đã ghép nối cũng sẽ bị loại bỏ.

Lớp NotificationCompat.WearableExtender có các phương thức cho phép bạn sử dụng mã nhận dạng thao tác đóng, như thể hiện trong ví dụ sau đây:

fun setDismissalId(dismissalId: String): WearableExtender
fun getDismissalId(): String

Để đồng bộ hoá một thao tác loại bỏ, hãy sử dụng phương thức setDismissalId(). Đối với mỗi thông báo, hãy truyền một mã nhận dạng duy nhất trên toàn cầu dưới dạng chuỗi khi bạn gọi phương thức setDismissalId().

Khi thông báo bị loại bỏ, tất cả các thông báo khác có cùng mã loại bỏ sẽ bị loại bỏ trên (các) đồng hồ và trên điện thoại. Để truy xuất mã loại bỏ, hãy sử dụng getDismissalId().

Trong ví dụ sau đây, tính năng đồng bộ hoá thao tác loại bỏ được bật vì một mã nhận dạng chung duy nhất được chỉ định cho một thông báo mới:

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(
        NotificationCompat.WearableExtender()
            .setDismissalId("abc123")
    )
    .build()

Lưu ý: Mã nhận dạng loại bỏ hoạt động nếu đồng hồ được ghép nối với điện thoại Android, nhưng không hoạt động nếu đồng hồ được ghép nối với điện thoại iPhone.

Khi thông báo không được bắc cầu

Thông báo sẽ không được bắc cầu trong các trường hợp sau:

Những phương pháp hay nhất cho thông báo cầu nối

Cần có thời gian để đẩy hoặc xoá các thông báo cầu nối khỏi một thiết bị đeo. Khi bạn thiết kế thông báo, hãy nhớ tránh các hành vi không mong muốn do độ trễ này gây ra. Các nguyên tắc dưới đây đảm bảo thông báo cầu nối của bạn hoạt động với thông báo không đồng bộ:

  • Nếu bạn hủy một thông báo trên điện thoại, thì có thể mất một chút thời gian để hủy thông báo tương ứng trên đồng hồ. Trong thời gian này, người dùng có thể gửi một trong các ý định đang chờ xử lý cho thông báo đó. Vì lý do này, ứng dụng của bạn sẽ nhận được ý định đang chờ xử lý từ những thông báo mà ứng dụng đã huỷ. Do đó, khi huỷ thông báo, hãy đảm bảo các trình nhận ý định đang chờ xử lý của các thông báo đó đều hợp lệ.
  • Không hủy và kích hoạt lại toàn bộ ngăn xếp thông báo cùng một lúc. Chỉ sửa đổi hoặc loại bỏ các thông báo đã thực sự được sửa đổi. Việc này giúp tránh độ trễ khi cập nhật thiết bị đeo, đồng thời đảm bảo mức độ ảnh hưởng của ứng dụng đối với thời lượng pin ở mức tối thiểu.

Những điều cần lưu ý khi thiết kế

Thông báo của Wear OS có các nguyên tắc thiết kế riêng. Để biết thêm thông tin chi tiết, vui lòng tham khảo Các nguyên tắc thiết kế cho Wear OS.