Theo mặc định, hệ thống sẽ bắc cầu hoặc chia sẻ thông báo từ một ứng dụng đ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 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 điện thoại và ứng dụng đồng hồ 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 lặp, hãy lập trình để tắt chế độ cầu nối trong ứng dụng đồng hồ.
Dùng thẻ cầu nối
Để bắc cầu một số thông báo mà ứng dụng điện thoại tạo ra sang đồng hồ khi ứng dụng đồng hồ được cài đặt, 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 đó. Ví dụ: để 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:
// In this example, bridging is only enabled for tagOne, tagTwo and tagThree. BridgingManager.fromContext(context).setConfig( BridgingConfig.Builder(context, isBridgingEnabled = 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)
Để tránh việc bắc cầu mọi thông báo của một ứng dụng dành cho đ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:
<!-- Beware, this can have unintended consequences before the user is signed-in --> <meta-data android:name="com.google.android.wearable.notificationBridgeMode" android:value="NO_BRIDGING" />
Đặ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ả điện thoại 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 người dùng đóng một thông báo, 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 sẽ 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:
Khi người dùng đóng thông báo, 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()
Thông báo chỉ cục bộ
Để tránh thông báo trùng lặp, bạn cũng có thể dùng setLocalOnly() để thông báo chỉ xuất hiện trên điện thoại.
Tuy nhiên, bạn chỉ nên sử dụng phương thức này nếu thông báo chỉ xuất hiện trên thiết bị đã tạo thông báo đó. Điều này không chỉ bao gồm các thiết bị Wear OS mà còn cả các thiết bị đeo khác và mọi thiết bị được kết nối khác. Thông báo chỉ cục bộ sẽ không bắc cầu, ngay cả khi ứng dụng của bạn chưa được cài đặt trên đồng hồ.
Khi tạo một ứng dụng Wear OS và ứng dụng điện thoại cùng tạo thông báo, đừng sử dụng phương pháp này để tránh các thông báo trùng lặp. Thay vào đó, hãy sử dụng các lựa chọn bắc cầu.
Ví dụ: sử dụng thông báo chỉ cục bộ khi người dùng tải một tệp xuống điện thoại và thông báo cho biết quá trình tải xuống đã hoàn tất.
Khi thông báo chưa được đặt ở chế độ cầu nối
Hệ thống không bắc cầu các loại thông báo sau:
- Thông báo chỉ hiển thị cục bộ được thiết lập bằng
Notification.Builder.setLocalOnly(boolean). - Thông báo hiển thị liên tục được đặt bằng
Notification.Builder.setOngoing(boolean)hoặcNotification.FLAG_ONGOING_EVENT. - Thông báo không thể xoá được đặt bằng
Notification.FLAG_NO_CLEAR. - Thông báo trong thiết bị được ghép nối với ứng dụng cho thiết bị đeo đã tắt chế độ cầu nối của thông báo.
Những điều cần cân nhắc khi triển khai 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 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 sau đâ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, hãy xem Nguyên tắc thiết kế Wear OS.