Giới thiệu
Kể từ Android 8.0 (API 26), mọi notification đều phải được gắn với một channel. Với mỗi channel thì bạn có thể set các đặc điểm chung cho tất cả các notification thuộc channel đó. Và người dùng có thể thay đổi những thông số của các channel theo ý họ muốn.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create the NotificationChannel
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
mChannel.description = descriptionText
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
Ví dụ về cách tạo một notification channel, lưu ý rằng một khi bạn đã tạo channel thì bạn ko thể thay đổi các cài đặt và user mới là người có thể sửa đổi channel.
Set the importance level
Việc chọn importance level phù hợp sẽ giúp cho notification mang thông tin có ích mà lại không gây khó chịu cho user. Các bạn có thể tham khảo bảng định nghĩa các mức importance level và đặc điểm ở bảng dưới.
Ví dụ: Một cuộc gọi đến thì nên có IMPORTANCE_HIGH, một thông báo về việc app có phiên bản mới nhưng ko phải là bản force update thì chỉ nên để IMPORTANCE_LOW
CÙng so sánh một chút nhé, IMPORTANCE_HIGH và IMPORTANCE_DEFAULT khác nhau ở điểm gì?
- IMPORTANCE_HIGH ngoài có âm thanh, xuất hiện trên status bar thì còn hiện cả nội dung của noti dù bạn đang ở ứng dụng khác
src https://i.stack.imgur.com/43uVZ.png
-
IMPORTANCE_DEFAULT chỉ có âm thanh, xuất hiện trên status bar mà ko hiện nội dung noti
-
IMPORTANCE_LOW thì khác IMPORTANCE_DEFAULT là ko có sound luôn, chỉ xuất hiện trên status bar
-
IMPORTANCE_MIN ko xuất hiện trên status bar nhưng vẫn có trong list notification khi vuốt từ status bar
Tương tác với channel
Như mình đã nói ở trên thì một khi tạo ra channel thì bạn ko thể sửa nó, user thì có thể sửa bất kỳ lúc nào từ setting noti của app? Vậy về phía dev thì có thể làm gì với channel ko? Ngoài việc sử dụng channel thì bạn có thể
- Đọc các setting của channel
- Tạo intent điều hướng tới setting của channel
- Xóa channel
Ngoài ra bạn có thể tạo channel group cho trường hợp ứng dụng hỗ trợ nhiều loại account như work và cá nhân. Tương tự như channel thì một khi đã tạo là bạn ko thể thay đổi cài đặt của channel group.
// The id of the group.
val groupId = "my_group_01"
// The user-visible name of the group.
val groupName = getString(R.string.group_name)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
FCM hỗ trợ channel
Khi tạo noti từ firebase các bạn có thể điền channel id tương ứng mà đã tạo trên app để có các setting phù hợp nhất nhé.
Ví dụ về channel trong app
Dưới đây là một số ví dụ về cài đặt channel của các app phổ biến mà bạn có thể tham khảo
Đọc thêm
https://developer.android.com/guide/topics/ui/notifiers/notifications