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 hay chia sẻ từ một ứng dụng trên điện thoại với 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 tạo ra và bắc cầu còn 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 theo cách bắc cầu.

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 loại thông báo trùng lặp này, hãy lập trình để tắt chế độ cầu nối trong ứng dụng cho thiết bị đeo.

Dùng thẻ cầu nối

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 di động sang đồ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 trên một thông báo bằng cách dùng phương thức setBridgeTag(String) như minh hoạ trong mã mẫu sau đây:

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

Tắt chế độ cầu nối

Bạn có thể tắt chế độ cầu nối cho một số thông báo hoặc cho mọi thông báo. Bạn nên tắt chế độ cầu nối một cách có chọn lọc.

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à tuỳ ý cho phép một số thông báo dựa trên thẻ của thông báo đó. Chẳng hạn để tắt chế độ cầu nối cho mọi thông báo ngoại trừ những thông báo được gắn thẻ là tagOne, tagTwo hoặc tagThree, hãy sử dụng đối tượng BridgingConfig như minh hoạ trong ví dụ sau:

BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, false)
        .addExcludedTags(listOf("tagOne", "tagTwo", "tagThree"))
        .build()
)

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

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 được thông báo.

Để tránh việc bắc cầu mọi 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.

Đặt mã loại bỏ để đồng bộ hoá các thông báo tương tự

Khi bạn ngăn việc bắc cầu bằng tính năng của chế độ cầu nối, thao tác đóng 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 các thông báo tương tự được tạo trên cả thiết bị di động và đồng hồ, thì bạn cần đóng cả hai thông báo khi người dùng đóng một trong 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ị đóng, những thông báo khác có cùng mã nhận dạng trên đồng hồ đã ghép nối cũng bị đóng.

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ư trong ví dụ sau:

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

Để đồng bộ hoá một thao tác đóng, 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 chung duy nhất dưới dạng chuỗi khi bạn gọi phương thức setDismissalId().

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

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

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

Lưu ý: Mã đóng sẽ hoạt động nếu đồng hồ được ghép nối với điện thoại Android. Tuy nhiên, mã này sẽ 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 chưa được đặt ở chế độ cầu nối

Những loại thông báo sau không được bắc cầu:

Các phương pháp hay nhất cho thông báo được bắc cầu

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 giúp đảm bảo thông báo được bắc cầu của bạn tương thích với thông báo không đồng bộ:

  • Nếu bạn huỷ một thông báo trên điện thoại, thì có thể mất một chút thời gian để huỷ 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ý về thông báo đó. Vì lý do này, hãy tiếp tục nhận các ý định đang chờ xử lý trong ứng dụng của bạn từ các thông báo mà ứng dụng đã huỷ: khi huỷ thông báo, hãy giữ cho các trình nhận ý định đang chờ xử lý của các thông báo đó luôn hợp lệ.
  • Không huỷ 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. Điều này giúp tránh độ trễ khi cập nhật thiết bị đeo, đồng thời giảm mức tác động của ứng dụng đối với thời lượng pin.

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 tham khảo Các nguyên tắc thiết kế cho Wear OS.