Xây dựng server-side để push notification với fcm
This post hasn't been updated for 3 years
FCM là một API được sử dụng để chuyển tải thông điệp cho nhiều nền tảng như Android, iOS. Sử dụng FCM, ứng dụng có thể gửi thông báo đến người sử dụng mỗi khi có thông tin mới và điều này thật hữu ích cho những tin nhắn tiếp thị như cửa hàng thời trang thông báo đến khách hàng khi có sản phẩm mới, … Cũng giống GCM hay APNS, Firebase Cloud Message cũng cấp API cho người dùng đầu cuối để truyền tải thông điệp. FCM hỗ trợ các nền tảng Android, IOS hay cả Web Application. Điều này rất hữu ích cho việc phát triển app đa nền tảng.
1. Hoạt Động:
Mô hình hoạt động của FCM. Đơn giản FCM hoạt động nhờ 3 thành phần
- Publisher: Có thể là web form, web server của ta để gửi thông điệp. Thông điệp này là một json được gửi lên server của FCM. Sau đó Fcm sẽ push message theo các device tương ứng .
- FCM Server: Trung gian giữa server và client có nhiệm vụ tiếp nhận message từ server và push message tới client. Ngoài ra nó cũng tiếp nhận message đăng kí device token từ client.
- Client app: nhận message gửi về.
**2. Xây dựng server với gem FCM và rails ** Để xây dựng một server side có nhiệm vụ tiếp sử lưu device token và gửi message lên server API của firebase . Sử dụng gem fcm để xây dựng một server với ngôn ngữ rails.
Install gem
gem 'fcm'
Để sử dụng ta cần require gem: require 'fcm' và dùng class FCM để khởi tạo với server key được tạo bởi server của firebase. Ví dụ như sau:
require 'fcm'
@fcm = FCM.new(server_key)
FCM cung cấp một instance method send
cho phép gửi notification đến server của fire base thông qua device_token mà client đã đăng kí với firebase server.
Để gửi cho nhiều device_token ta truyền token vào một mảng. Ta có thể truyền từ 1 đến tối đa 1000 device token.
@fcm.send(registration_ids, options)
2 tham số ở trên:
- registration_ids: là môt mảng device_token
- options: data truyền xuống client. Một options là một json có dạng cơ bản {data: {xxx}}. hash
xxx
sẽ là message được truyền lên server firebase để push xuống các client tương ứng
Khi sử dụng gem ta có các thuộc tính sau:
- Gửi messages cho các devices đăng kí cùng 1 topics Cú pháp:
response = fcm.send_with_notification_key("/topics/yourTopic",
data: {message: "This is a FCM Topic Message!")
hoặc
response = fcm.send_to_topic("yourTopic",
data: {message: "This is a FCM Topic Message!")
Bằng cách này server có thể gửi nhiều message cho các device mà nó đăng kí cùng 1 topics. Ví dụ khi có 1 events mà ta muốn thông báo cho toàn bộ các máy subscribe event đó . Ta chỉ cần gửi thông qua topics này thay vì gửi cho toàn bộ các devices như cách trên kia.
- Gửi thông qua notification_key. Bằng việc tạo ra notification_key để chỉ định cho một project của nhiều ứng dụng được sử dụng một người dùng duy nhất , tao có thể chỉ gửi 1 tin nhắn duy nhất là nhóm ứng dụng đó đều có thể nhận được Tạo notification key bằng lệnh:
response = fcm.create(key_name: "appUser-Chris",
project_id: "my_project_id",
registration_ids: ["4", "8", "15", "16", "23", "42"])
và sử dụng notification đó:
response = fcm.send_with_notification_key("notification_key",
data: {score: "3x1"},
collapse_key: "updated_score")
Ngoài ra ta có thể thêm bớt số device_token đăng kí cho 1 notification_key đó:
response = fcm.add(key_name: "appUser-Chris",
project_id: "my_project_id",
notification_key:"appUser-Chris-key",
registration_ids:["7", "3"])
response = fcm.remove(key_name: "appUser-Chris",
project_id: "my_project_id",
notification_key:"appUser-Chris-key",
registration_ids:["8", "15"])
All Rights Reserved