Notification là tính năng cho phép gửi thông điệp hay thông báo đến toàn bộ người dùng. Hosting Việt sẽ hướng dẫn bận cài đặt và sử dụng Notification Facebook, Notification Android.
Notification là gì?
Notification là tính năng cho phép gửi thông điệp hay thông báo đến toàn bộ người dùng. Các thông tin này sẽ hiển thị trên điện thoại và ngoài giao diện ứng dụng. Người dùng có thể nhấn vào notification android để thực hiện hành động trực tiếp như gửi tin nhắn hoặc mở ứng dụng.
Ngoài ra, bạn cũng có thể lên sẵn lịch gửi thông báo đến người dùng. Nội dung thông báo có thể bằng đoạn text hay các card đã được tạo trước đó.
Lưu ý: Trong trường hợp nội dung của notification android là card thì nó chỉ được chứa số một Text Card, hoặc một Gallery… , ngoại trừ các module.
Cách sử dụng notification
Trong bài viết này, Hosting Việt sẽ hướng dẫn cách tạo notification android hay notification facebook trên nền tảng android tối thiểu là 4.0 (API level 14). Code sử dụng là NotificationCompat APIs có từ thư viện hỗ trợ của hệ điều hành Android. Ưu điểm của APIs giúp bạn có thể thêm các đặc tính mới, phù hợp nhu cầu sử dụng.
Thêm thư viện hỗ trợ notification android
Mặc dù, hầu hết các dự án tạo notification với Android Studio đều có đầy đủ các công cụ cần thiết để thiết lập. Tuy nhiên, bạn cũng nên kiểm tra lại để đảm bảo không bị trở ngại trong quá trình thiết lập. Lệnh kiểm tra:
dependencies {
implementation "com.android.support:support-compat:27.1.1"
}
*Lưu ý: Các thư viện của nhóm com.android.support đã bao gồm support-compat. Vì thế, nếu bạn dùng thư viện hỗ trợ của APIs khác, thì điều đó đồng nghĩa với việc bạn có quyền truy cập NotificationCompat mà không cần thêm dependency.
Tạo notification facebook đơn giản
Notification đơn giản, tức chỉ hiển thị một icon, một tiêu đề cùng một nội dung ngắn gọn. Trong hướng dẫn này, Hosting Việt sẽ đề cập đến cách tạo notification mà người dùng có thể ấn vào và mở ra một hoạt động (activity) trên ứng dụng.
- Gán nội dung cho notification
Nội dung là mục cực kỳ quan trọng và được thực hiện đầu tiên. Để t thiết lập nội dụng, bạn điền các thông tin sau.
- Small icon: rất cần thiết, chúng được gắn qua mục set Small Icon().
- App name: được hệ thống cung cấp.
- Timestam: hệ thống sẽ cung cấp.
- Large icon: không bắt buộc và thường được gán qua mục Set Large Icon(). Vì là icon lớn nên nó chỉ được dùng cho các hình ảnh liên lạc.
- Title: không bắt buộc và được cài đặt qua set Content Title().
- Text: không bắt buộc. Bạn cài đặt qua set Content Text().
Nếu muốn gắn quyền ưu tiên cho notification thì bạn cài đặt trong Set Priority(). Với Android 7.1 hoặc phiên bản thấp hơn thì dùng priority để xác định mức độ hiển thị. Còn Android 8.0 trở lên thì sử dụng chanel importance.
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(textTitle)
.setContentText(textContent)
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
*Lưu ý:
Với phiên bản Android 8.0 (API level 26) trở lên thì hàm khởi tạo Notification Builder sẽ yêu cầu đưa vào chanel ID để tương thích, nhằm có thể hiển thị notification. Tuy nhiên, với phiên bản thấp hơn thì không cần.
Theo mặc định, nội dung notification sẽ bị cắt bỏ một ít để có thể vừa một dòng. Nếu muốn notification thể hiện nhiều nội dung thì bạn cần dùng đến set Style().
Cú pháp lệnh:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Much longer text that cannot fit one line...")
.setStyle(new NotificationCompat.BigTextStyle()
.bigText("Much longer text that cannot fit one line..."))
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
- Tạo chanel và gán giá trị importance
Với phiên bản Android 8.0 trở lên, trước khi tạo một notification, bạn phải đăng ký notification channel qua một instance.
Cú pháp lệnh:
private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = getString(R.string.channel_name);
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
*Lưu ý:
- Nên dùng đoạn code trên khi bắt đầu khởi động ứng dụng và đoạn code này có thể được lặp lại nhiều lần mà không hề gây lỗi.
- Hàm khởi tạo notification chanel yêu cầu giá trị importance. Đây là một hằng số từ notification manager. Giá trị này sẽ xác định các trường hợp hiển thị của thông báo. Nếu dùng phiên bản Android 7.1 trở xuống thì bạn cũng có thể gán giá trị priority. Ngoài ra, cũng có một số trường hợp, hệ thống sẽ thay đổi giá trị importance. Vì thế, bạn có thể định nghĩa lại trị số importance cho chanel.
- Activity khi người dùng chạm vào notification là gì
Nếu muốn người dùng được chuyển về bất kỳ một hoạt động nào trong ứng dụng của bạn khi chạm vào notification thì bạn cần tạo context intent, và có định nghĩa pending intent cùng set Content Intent ().
Câu lệnh khi người dùng chạm vào notification thì sẽ được chuyển sang màn hình MainActivity:
Intent intent = new Intent(this,MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0);
Notification notify = new Notification.Builder(this)
.setContentTitle("New email from " + "tuantv@gmail.com")
.setContentText("Subject")
.setSmallIcon(R.drawable.btn_selected)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.addAction(R.drawable.call_icon, "Call", pendingIntent1)
.addAction(R.drawable.more_icon, "More", pendingIntent1)
.addAction(R.drawable.more_and_more_icon, "And more", pendingIntent1).build();
- Hiển thị notification android
Để hiển thị notification, bạn vào NotificationManagerCompat.notify(), nhập ID cho notification. Lưu ý, bạn nên lưu lại số ID để thuận tiện trong việc chỉnh sửa hay xóa notification trong tương lai.
Ví dụ:
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
// notificationId is a unique int for each notification that you must define
notificationManager.notify(notificationId, mBuilder.build());
Với phiên bản Android 8.1 (API level 27) trở lên thì nếu có nhiều notification cùng xuất hiện, ứng dụng chỉ phát ra âm thanh cho notification đầu tiên trong mỗi giây.
Cách sử dụng notification: thêm action buttons
Mỗi notification sẽ cung cấp tối đa 3 action button để người sử dụng có thể phản hồi nhanh. Ví dụ như trả lời lời nhắc, hay trả lời tin nhắn văn bản.
Để thiết lập button, bạn thêm PendingIntent vào phương thức addAction().
Ví dụ:
Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(ACTION_SNOOZE);
snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
PendingIntent snoozePendingIntent =
PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pendingIntent)
.addAction(R.drawable.ic_snooze, getString(R.string.snooze),
snoozePendingIntent);
Thêm hành động trả lời trực tiếp trên notification android
Hoạt động phản hồi trực tiếp trên notification chỉ có thể được thiết lập trên hệ điều hành Android 7.0 (API level 24) trở lên. Nó cho phép chuyển nội dung đến ứng dụng mà không cần mở bất kỳ activity. Điển hình như người dùng có thể trả lời tin nhắn trên notification bằng cách nhấn vào nút reply như hình minh họa dưới đây.
- Thêm button phản hồi
- Để thêm button, bạn tạo một instance của RemoteInput Builder. Hàm khởi tạo của câu lệnh sẽ yêu cầu một biến string và chúng được hệ thống dùng như chìa khóa để nhập dữ liệu vào.
Ví dụ:
// Key for the string that's delivered in the action's intent.
private static final String KEY_TEXT_REPLY = "key_text_reply";
String replyLabel = getResources().getString(R.string.reply_label);
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
.setLabel(replyLabel)
.build();
- Tạo PendingIntent cho button phản hồi.
Câu lệnh:
// Build a PendingIntent for the reply action to trigger.
PendingIntent replyPendingIntent =
PendingIntent.getBroadcast(getApplicationContext(),
conversation.getConversationId(),
getMessageReplyIntent(conversation.getConversationId()),
PendingIntent.FLAG_UPDATE_CURRENT);
Lưu ý:
Nếu sử dụng lại PendingIntent, người dùng có thể tùy ý phản hồi cuộc trò chuyện với nội dung khác nhau. Vì thế, bạn cần cung cấp nhiều request code cho mỗi cuộc trò chuyện hay có thể cung cấp một intent và chúng không trả về true khi người dùng gọi equal(). Còn Conversation ID thông thường sẽ được thêm bundle của intent.
- Thiết lập RemoteInput vào addRemoteInput().
Câu lệnh:
// Create the reply action and add the remote input.
NotificationCompat.Action action =
new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon,
getString(R.string.label), replyPendingIntent)
.addRemoteInput(remoteInput)
.build();
- Hiển thị thông báo
Câu lệnh:
// Build the notification and add the action.
Notification newMessageNotification = new Notification.Builder(mContext, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_message)
.setContentTitle(getString(R.string.title))
.setContentText(getString(R.string.content))
.addAction(action)
.build();
// Issue the notification.
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(notificationId, newMessageNotification);
- Nhận thông tin phản hồi của người dùng
Để nhận tất cả các thông tin mà người dùng phản hồi từ notification, bạn sử dụng RemoteInput.getRsultsFromIntent() và nhận từ BroadcastReceiver thông qua Intent:
Câu lệnh:
private CharSequence getMessageText(Intent intent) {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput != null) {
return remoteInput.getCharSequence(KEY_TEXT_REPLY);
}
return null;
}
Sau khi xử lí dữ liệu, bạn cập nhật lại notification bằng cách sử dụng cùng ID hoặc tag trong NotificationManagerCompat.notify(). Điều này khá cần thiết giúp che giao diện tương tác với người dùng (phản hồi hay xác nhận thông tin).
Câu lệnh:
// Build a new notification, which informs the user that the system
// handled their interaction with the previous notification.
Notification repliedNotification = new Notification.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_message)
.setContentText(getString(R.string.replied))
.build();
// Issue the new notification.
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(notificationId, repliedNotification);
Hiển thị notification là gì khi khóa màn hình
Bạn sử dụng setVisibility() khi muốn quản lý mức độ hiển thị của thông báo từ màn hình khóa. Các mức hiển thị như sau:
- Visibility_Public: hiện đầy đủ nội dung của thông báo.
- Visibility_Secret: không hiển thị thông báo khi màn hình khóa.
- Visibility_Private: chỉ hiển thị thông báo ở dạng cơ bản nhất như icon hay tiêu đề.
Lưu ý:
Notification sẽ hiển thị theo đúng cài đặt của bạn, trừ khi xảy ra một trong các hành động sau:
- Người dùng chặn thông báo.
- Người dùng vào notification.
- Bạn cài đặt setAutoCancel() khi tạo notification.
- Bạn cài đặt hủy (cancel()) cho một ID thông báo cụ thể hoặc dùng cancelAll() để xóa tất cả notification đã tạo.
- Hệ thống tự hủy notification khi hết thời gian được chỉ định do bạn cài đặt chế độ timeout (setTimeoutAfter()) cho thông báo.
Lên lịch gửi notification facebook
- Bạn bật nút Schedule để lên lịch gửi thông báo đến người dùng. Có nhiều chế độ để lựa chọn theo nhu cầu như: ngày, giờ, lặp lại thông báo.
- Bật nút Filter để chọn đối tượng nhận thông báo: giới tính, địa điểm, hay người dùng cụ thể.
>>Xem thêm: High availability là gì? Cách xây dựng hệ thống high availability Chuẩn Chỉnh, Bài Bản
Lúc này, tất cả các notification đã được lưu trữ và lưu lịch trình tại Calendar.
Hủy notification là gì?
Nếu muốn hủy bất kỳ một notification nào, bạn sử dụng câu lệnh sau:
- Xóa 1 thông báo: notificationManager.cancel(notificationID)/
- Xóa tất cả: notificationManager.cancelAll().
Trên đây là chia sẻ của Hosting Việt về Notification Là Gì? Cách sử dụng Notification hiệu quả! Hi vọng, bài viết mang đến cho bạn nhiều thông tin hữu ích. Nếu có bất kỳ thắc mắc hay câu hỏi nào cần giải đáp, hãy liên hệ ngay với Hosting Việt để được hỗ trợ và tư vấn nhanh chóng, miễn phí nhé!