Thông báo (Notification) trong android với Firebase Cloud Messaging – Phần 1

Chúng tôi rất vui mừng chia sẻ kiến thức về từ khóa Fcm la gi để tối ưu hóa nội dung trang web và tiếp thị trực tuyến. Bài viết cung cấp phương pháp tìm kiếm, phân tích từ khóa và chiến lược hiệu quả. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi để cập nhật kiến thức mới.

Chào mọi người, cũng lâu lắm rồi mình mới trở lại đây. Chắc hẳn các bạn đã quá thân thuộc với những thông tin (Notification) trên các ứng dụng điện thoại thông minh ví dụ như Messenger, Shopee,… Thì gần đây mình có tìm hiểu về Android cũng như việc xử lý gửi và nhận thêm các thông tin như vậy để làm đồ án trên trường. Đó là một khối hệ thống về bán món ăn vặt + quản lý shipper, nghĩa là lúc có một người dùng đặt hàng thì đơn hàng sẽ tiến hành gửi dưới dạng các thông tin (Notification) tới các shipper trong một phạm vi nào đó. Đó là về đồ án của mình, còn trong nội dung bài viết này mình sẽ san sẻ với những bạn dựa trên những gì tôi đã tìm hiểu được về việc gửi và nhận thông tin với Firebase Cloud Messaging. Hy vọng vài viết này sẽ giúp những bạn mới làm quen với Android biết thêm về một chức năng vô cùng thú vị .

Bạn Đang Xem: Thông báo (Notification) trong android với Firebase Cloud Messaging – Phần 1

Firebase Cloud Messaging (FCM) là một dịch vụ gửi thông tin, tin nhắn đa nền tảng được cung cấp bởi Google, được chấp nhận bạn nhắn tin nhắn, thông tin một cách đáng tin cậy và hoàn toàn miễn phí tới các thiết bị đã được đăng ký với FCM.

Nguyên tắc hoạt động: Các thiết bị client sẽ đăng ký device_token lên cho FCM. Các thông tin, tin nhắn được soạn và gửi từ một website, từ Notifications composer của firebase cung cấp, …. FCM sẽ nhận những thông tin này và xử lý gửi về các thiết bị đã đăng ký với FCM từ trước. Lúc các thiết bị có kết nối mạng thì thông tin sẽ tiến hành gửi về ứng dụng thành công.

Với FCM, có 2 loại thông tin, tin nhắn mà chúng ta cũng có thể gửi tới ứng dụng, đó là:

  • Notification messages: Thỉnh thoảng được gọi là “thông tin (tin nhắn) hiển thị”, chúng được xử lý tự động hóa bởi FCM SDK. Notification messages chứa các key tài liệu đã được khái niệm trước. Sử dụng Notification messages khi chúng ta chỉ muốn hiển thị các thông tin tới các ứng dụng clients.
  • Data messages: Là thông tin (tin nhắn) sẽ tiến hành xử lý bởi các ứng dụng client. Data messages chứa các cặp key – value do người dùng khái niệm. Sử dụng Data messages khi chúng ta muốn xử lý các thông tin trên chính ứng dụng của bạn.

Thông tin Firebase hoạt động khác nhau tùy thuộc vào trạng thái của ứng dụng (Background/Foreground). Trong android, để nhận Firebase message thì hãy phải tạo một service và extend FirebaseMessagingService. Để xử lý các thông tin nhận được bạn cần phải override phương thức onMessageReceived. Phương thức này xử lý được hồ hết các loại tin nhắn, ngoại trừ các trường hợp sau:

  • Nhận Notification messages khi ứng dụng đang ở trạng thái background. Trong trường hợp này, thông tin sẽ tiến hành gửi đến khay khối hệ thống của thiết bị, khi người dùng chạm vào thông tin sẽ mở trình khởi chạy ứng dụng mặc định.
  • Nhận thông tin có chưa cả Notification messages và Data messages khi ứng dụng đang ở trạng thái background. Trong trường hợp này, phần Notification sẽ tiến hành gửi đến khay khối hệ thống, còn phần Data sẽ tiến hành sử dụng cho trình khởi chạy các Activity khi chạm vào thông tin.

Tổng quát về việc xử lý nhận Firebase messages:

Trạng thái ứng dụng Notification messages Data messages Cả hai loại messages Foreground onMessageReceived() onMessageReceived() onMessageReceived() Background Khay khối hệ thống onMessageReceived() Phần Notification: khay khối hệ thống. Phần Data: phần bổ sung cho Intent.

Sau đây tất cả chúng ta cùng tìm hiểu về loại firebase message trước nhất là Notification messages bằng phương pháp gửi và nhận chúng thông qua một ứng dụng Android nhé

Cấu trúc :

Sau này là cấu trúc của một Notification messages:

{ “message”:{ “token”:”bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1…”, “notification”:{ “title”:”Portugal vs. Denmark”, “toàn thân”:”great match!” } } }

Các key notification, title, toàn thân là các key tài liệu được khái niệm một mực trong Notification messages.

Tạo ứng dụng Android xử lý nhận Notification messages

  1. Tạo ứng dụng bằng Android Studio (version ngày nay mình đang dùng là 3.2.1).

  2. Xem Thêm : Document Fee Là Gì? Phân Biệt Phí DOC Fee và D/O Fee!

    Kết nối với Google firebase

    • Trước hết bạn cần phải vào Firebase console để đăng nhập và tạo một project như ảnh sau:

    • Mở ứng dụng mà bạn vừa tạo trên Android Studio và tiến hành kết nối đến Firebase của bạn: Trước hết bạn cần phải đăng nhập tài khoản Google mà bạn đã dùng ở bước trên vào Android Studio. Sau đó click vào Tools -> Firebase , chọn phần Cloud Messaging , click vào Setup và sau đó click vào Connect to Firebase để chọn Firebase project mà bạn đã tạo ở bước trước để kết nối: 😄 😄

    • Thêm Firebase Cloud Messaging (FCM) vào ứng dụng: Bạn phải thêm một số FCM dependency sau đây vào file build.grade(app):

      dependencies { …. implementation ‘com.google.firebase:firebase-core:16.0.6’ implementation ‘com.google.firebase:firebase-messaging:17.3.4’ } apply plugin: ‘com.google.gms.google-services’

      Sau thời điểm thêm thì bạn cần phải đồng bộ lại bằng phương pháp Click vào Sync Now ở góc cạnh trên bên phải của Android Studio.

  3. Xử lý nhận thông tin và hiện thông báo nổi trên màn hình hiển thị:

    Bạn phải tạo một service mang tên là MyFirebaseService và extends từ FirebaseMessagingService như sau:

    public class MyFirebaseService extends FirebaseMessagingService { private static final String TAG = “MyFirebaseService”; @Override public void onMessageReceived(RemoteMessage remoteMessage) { // handle a notification payload. if (remoteMessage.getNotification() != null) { Log.d(TAG, “Message Notification Body toàn thân: ” + remoteMessage.getNotification().getBody()); sendNotification(remoteMessage.getNotification().getBody()); } } @Override public void onNewToken(String token) { Log.d(TAG, “Refreshed token: ” + token); sendRegistrationToServer(token); } private void sendRegistrationToServer(String token) { // TODO: Implement this method to send token to your app server. } private void sendNotification(String messageBody) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); String channelId = getString(R.string.project_id); Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId) .setSmallIcon(R.drawable.ic_launcher_background) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background)) .setContentTitle(getString(R.string.project_id)) .setContentText(messageBody) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent) .setDefaults(Notification.DEFAULT_ALL) .setPriority(NotificationManager.IMPORTANCE_HIGH) .addAction(new NotificationCompat.kích hoạt( android.R.drawable.sym_call_missed, “Cancel”, PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT))) .addAction(new NotificationCompat.kích hoạt( android.R.drawable.sym_call_outgoing, “OK”, PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT))); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // Since android Oreo notification channel is needed. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel( channelId, “Channel human readable title”, NotificationManager.IMPORTANCE_DEFAULT); notificationManager.createNotificationChannel(channel); } notificationManager.notify(0, notificationBuilder.build()); } }

    Mình sẽ giảng giải sơ qua về các method ở trên nhé:

    • onMessageReceived(): Phương thức này sẽ chạy khi có thông tin từ firebase gửi về. Cần lưu ý rằng khi đối chiếu với loại thông tin Notification messages thì phương thức này chỉ chạy khi ứng dụng của bạn đang ở trạng thái Foreground, còn nếu ứng dụng đang ở trạng thái Background thì thông tin sẽ tiến hành hiển thị trong khay thông tin của thiết bị và phương thức này sẽ không còn được chạy (Như bảng tôi đã trình bày ở phần trên). Này cũng đấy là nguyên nhân mình tạo Service xử lý hiện thông báo để cho những bạn thấy rõ việc xử lý nhận thông tin của ứng dụng khi đối chiếu với loại thông tin là Notification messages.
    • onNewToken(): Khi một thiết bị cấu hình thiết lập ứng dụng thì nó sẽ đăng ký một device_token lên cho Firebase để Firebase có thể dựa vào các token này để gửi các thông tin về thiết bị. Với phương thức này chúng ta cũng có thể lấy được token đó. Chúng ta cũng có thể lưu token này vào Database để phục vụ cho những chức năng ví dụ như gửi thông tin, tin nhắn từ một website về các thiết bị,…
    • sendNotification(): Đây là phương thức hiện thông báo đã nhận được được dưới dạng một popup nổi trên màn hình hiển thị thiết bị, tôi đã thiết lập có thêm 2 button là OKCancel để phân biệt với thông tin được xử lý hiển thị trên khay khối hệ thống khi ứng dụng ở trạng thái Foreground.

    Tiếp theo bạn cần phải đăng ký Service này bằng phương pháp copy và dán đoạn code sau vào file AndroidManifest.xml:

    <service android:name=”.Services.MyFirebaseService”> <intent-filtervàgt; <action android:name=”com.google.firebase.MESSAGING_EVENT” /> </intent-filtervàgt; </servicevàgt;

    Bạn tiến hành build ứng dụng ra máy ảo (hoặc máy thật) (máy mình hơi yếu nên mình build ứng dụng ra máy thật luôn, hehe ). Okie, vậy là đã xong 1 ứng dụng nho nhỏ nhận thông tin. Việc tiếp theo là tất cả chúng ta cần gửi thông tin để test thôi

Gửi Notification messages

Xem Thêm : Xét nghiệm gộp mẫu Covid-19 ở đâu Hà Nội?

Chúng ta cũng có thể gửi Notification messages thông qua một ứng dụng web, hoặc từ Notification Composer của Firebase,…. Ở bài tiếp theo về xử lý thông tin Data messages thì mình sẽ hướng dẫn các bạn gửi thông tin từ một ứng dụng website, còn bài này mình sẽ dùng Notification Composer cho đơn giản nhé

Các bạn vào Firebase console, đăng nhập và chọn Project tương ứng mà bạn đã tạo ở bước trên. Trên thanh sidebar bên trái các bạn chọn mục Cloud Messaging và click vào Send your first message sau đó nhập nội dung thông tin, chọn ứng dụng android mà bạn đã kết nối đến Firebase ở trên và nhấn Publish để gửi thông tin.

Demo

Mình sẽ thực hiện gửi thông tin Notification messages với ứng dụng nhận ở hai trạng thái là Foreground và Background:

1. Ứng dụng ở trạng thái Foreground:

  • Màn hình hiển thị thiết bị trước lúc gửi

  • Nội dung thông tin

  • Kết quả

2. Ứng dụng ở trạng thái Background:

  • Màn hình hiển thị thiết bị trước lúc gửi
  • Nội dung thông tin
  • Kết quả

Chúng ta cũng có thể thấy rõ ràng, trong trường hợp ứng dụng ở Foreground thì thông tin hiển thị nổi lên màn hình hiển thị và có 2 button OK và Cancel tôi đã xử lý trong Service tức thị phương thức onMessageReceived() đã được gọi. Trái lại ở trạng thái Background thông tin chỉ có Title và content và không hề có 2 Button tôi đã thêm, chứng tỏ nó không hề qua phương thức onMessageReceived(). Này cũng đấy là đặc điểm của thông tin dạng Notification messages trong Firebase Cloud Messaging.

Qua nội dung bài viết này tôi đã giới thiệu cho những bạn về thông tin (Notification) trong android với Firebase Cloud Messaging. Và hướng dẫn các bạn gửi và nhận thông tin dạng Notification messages thông qua một ứng dụng đơn giản. Tôi cũng là newbie android và viết dựa trên những gì mình hiểu nên hy vọng nội dung bài viết này sẽ sở hữu được ích cho những bạn, nhất là những bạn mới tìm hiểu về Android nói chung và Notification nói riêng.

Ở phần 2 mình sẽ trình bày về loại Firebase message còn sót lại là Data messages, hứa hẹn tái ngộ các bạn ở nội dung bài viết sau nhé (Đã có Phần 2 nhé mọi người)

https://firebase.google.com/docs/cloud-messaging/

You May Also Like

About the Author: v1000