Firebase Cloud Messaging

Firebase

I. Tổng quan

Firebase Cloud Messaging (FCM) là một dịch vụ của Firebase được cung cấp bởi Google để hỗ trợ việc gửi thông báo và tin nhắn từ máy chủ đến các thiết bị di động, ứng dụng web và thiết bị khác. 

Kiến trúc FCM:

Tóm tắt về cách FCM hoạt động

Đăng ký thiết bị:

Gửi token đến máy chủ:

Gửi thông báo từ máy chủ:

FCM đưa thông báo đến thiết bị:

Thiết bị xử lý thông báo:

Các ứng dụng của FCM không chỉ giới hạn trong việc gửi thông báo, mà còn có thể được tích hợp để thực hiện các tác vụ như đồng bộ dữ liệu, xác thực người dùng, và nhiều tính năng khác để cải thiện trải nghiệm người dùng trên nền tảng đa dạng.

Chú ý trong việc quản lý FCM token, nó sẽ thay đổi trong các trường hợp sau:

II. Tích hợp với Flutter

Tiếp tục với project demo ở bài trước, chúng ta thêm thư viện vào project flutter

Requesting permission

Mở thông báo hỏi quyền nhận notification khi khách hàng mở app lên:

FirebaseMessaging messaging = FirebaseMessaging.instance;

NotificationSettings settings = await messaging.requestPermission(

  alert: true,

  announcement: false,

  badge: true,

  carPlay: false,

  criticalAlert: false,

  provisional: false,

  sound: true,

);

print('User granted permission: ${settings.authorizationStatus}');

Sau khi khách hàng cho phép nhận notification, ứng dụng có thể xử lý được các message gửi tới với các trường hợp như sau

1.Foreground messages

Foreground là trạng thái ứng dụng đang mở, người dùng đang xem, đang sử dụng. Để nghe tin nhắn trong khi ứng dụng của bạn ở Foreground, lắng nghe onMessage:

FirebaseMessaging.onMessage.listen((RemoteMessage message) {

  print('Got a message whilst in the foreground!');

  print('Message data: ${message.data}');

  if (message.notification != null) {

    print('Message also contained a notification: ${message.notification}');

  }

});

Truy cập vào console -> Vào Messaging -> Tạo test message như sau

Send xuống device chúng ta sẽ nhận được dữ liệu tương ứng trong onMessage

2.Background messages

Là trạng thái ứng dụng đang ở nền (Khi ứng dụng đang được sử dụng mà người dùng nhấn phím home, hoặc chuyển sang dùng ứng dụng khác). Sử dụng onBackgroundMessage để nhận được message trong trường hợp này:

FirebaseMessaging.onBackgroundMessage(FCM.firebaseMessagingBackgroundHandler);

Khi ẩn app xuống background và bắn noti từ console chúng ta nhận được notification thành công với log:

3. App Killed

Khi app kill chúng ta không thể nhìn được log như 2 trường hợp trên, thay vào đó notification sẽ hiển thị ngay tại notification center trên thiết bị như sau:

Trường hợp debug không nhận được noti khi app kill, các bạn có thể truy cập và kiểm tra thêm theo hướng dẫn:

https://stackoverflow.com/questions/57054706/flutter-fcm-is-not-working-when-app-is-closed

https://github.com/firebase/flutterfire/issues/9685

Chú ý:

Đối với iOS, truy cập vào Project Settings -> Chọn Cloud Messaging -> Upload APNs certificates thì ứng dụng mới có thể nhận được notification, ngoài ra notification chỉ nhận được trên thiết bị thật.