Tùy 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ũng tồn tại trên một điện thoại đã được ghép nối, thì ứng dụng đó có thể tạo ra các thông báo trùng lặp. Wear OS có các tính năng để xử lý vấn đề này.

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ư từ tính năng Gửi thông báo qua đám mây của Firebase, ứng dụng cho thiết bị di động và ứng dụng cho thiết bị đeo của bạn có thể hiển thị thông báo riêng trên đồng hồ. Để tránh trường hợp trùng lặp này, bạn hãy tắt chế độ cầu nối khỏi ứng dụng cho thiết bị đeo khi ứng dụng được cài đặt.

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 gắn một số thông báo được tạo trên ứng dụng cho thiết bị di động vào đồng hồ khi ứng dụng cho thiết bị đeo được cài đặt, 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 sử 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

Nếu bạn đang sử dụng thẻ cầu nối, hãy tắt chế độ cầu nối trong thời gian chạy.

Tắt chế độ cầu nối với các ngoại lệ

Bạn có thể thiết lập chế độ cầu nối và tùy chọn cài đặt thẻ cho các thông báo được miễn trừ khỏi chế độ cầu nối, bằng cách sử dụng đối tượng BridgingManager. Tạo một đối tượng BridgingConfig như được hiển thị trong mục này.

Bạn có thể tắt chế độ cầu nối cho tất cả thông báo, ngoại trừ những thông báo được gắn một số thẻ nhất định. Chẳng hạn như bạn có thể tắt chế độ cầu nối cho tất cả thông báo, ngoại trừ những thông báo được gắn thẻ foo, bar hoặc baz như được hiển thị trong mẫu sau:

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

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

Nếu bạn không sử dụng thẻ cầu nối trên thiết bị di động, hãy tránh việc bắc cầu tất cả các thông báo của ứng dụng cho điện thoại. Sử dụng mục <meta-data> trong tệp kê khai của ứng dụng đồng hồ như trong ví dụ sau:

com.google.android.wearable.notificationBridgeMode

Thêm mục <meta-data> đó dưới dạng một phần tử con của phần tử <application>. Đặt mục siêu dữ liệu thành NO_BRIDGING như trong ví dụ sau:

<application>
...
  <meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />
...
</application>

Hành vi bắc cầu mặc định sẽ xảy ra nếu bạn không bao gồm mục <meta-data>, hoặc nếu bạn đặt giá trị thành BRIDGING thay vì NO_BRIDGING.

Cấu hình cầu nối được đặt trong tệp kê khai sẽ có hiệu lực ngay khi ứng dụng đồng hồ được cài đặt.

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ộ hóa 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ộ hóa 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 duy nhất trên toàn cầu, để 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ồ được 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ã loại bỏ, như được hiển thị trong ví dụ sau:

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

Để đồng bộ hóa 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, tính năng đồng bộ hóa các tùy chọn loại bỏ được bật vì mã nhận dạng duy nhất trên toàn cầu đượ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 xóa 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 đã hủy. Do đó, khi hủy 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 đó 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.

Cân nhắc về 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 xem lại Các nguyên tắc thiết kế cho Wear OS.