Giới thiệu
Tại sự kiện Google I/O tổ chức tháng 5 năm 2016. Google giới thiệu Firebase – một nền tảng đám mây với rất nhiều tính năng nổi bật cho các lập trình viên Mobile như: Firebase Analytics, Firebase Cloud Messaging, Firebase Auth, Realtime Database, Firebase Storage…
Firebase Cloud Messaging (FCM) là một dịch vụ miễn phí của Google. Thông qua FCM, nhà phát triển ứng dụng có thể gửi thông điệp một cách nhanh chóng, an toàn tới các thiết bị cài đặt ứng dụng của họ.
Bài viết này sẽ giúp bạn hiểu và sử dụng FCM khi muốn bắn Notification bằng API tới cùng lúc cả Android và IOS.
Ưu điểm của FCM là gì:
- thời gian triển khai nhanh, config server ko nhiều
- Tiết kiệm chi phí mua server
Firebase push notification hoạt động như thế nào?
Hình trên mô tả luồng hoạt động của Firebase Cloud Messaging.
- Server sẽ soạn thảo tin nhắn cần thông báo tới người sử dụng ứng dụng.
- Firebase sẽ chịu trách nhiệm gửi tới các thiết bị cài đặt ứng dụng.
Như vậy, để các thiết bị có thể nhận được thông điệp, Firebase phải xác đinh thông qua một mã gọi là Token khi thiết bị cài đặt ứng dụng.
Và chúng ta bắt đầu thực hiện nào.
Các bước thực hiện
Chúng ta cần chuẩn bị:
- 1 tài khoản firebase
- về phía IOS cần có APNs authentication key (Cách tạo ở đây)
Create firebase account
Bước 1: Tạo mới project hoặc import project đã tồn tại. Các bạn truy cập vào trang chủ firebase và tạo mới 1 project.
sau khi các bạn tạo xong thì các bạn vào mục setting để tạo application mà firebase sẽ làm việc:
Ở phần YOUR APP sẽ có các lựa chọn để mình add vào project:
- Android Application
- IOS Application
- Web Application
1.Đối với Android thì chúng ta cần các thông số sau:
Điền package name ứng dụng của bạn. (nếu bạn không nhớ chính xác thì cần xem trong file AndroidManifest.xml)
để biết thêm về cách config FCM với android thì các bạn theo link sau.
- Add IOS App vào tài khoản firebase
Ở bước này các bạn phải điền chính xác của app nếu ko FCM sẽ ko bắn notification được
3.config FCM Sau khi các bạn add App vào FireBase Project rồi thì các bạn qua tab Cloud Messaging
- Đối với server thì các bạn cần chú ý tới "Legacy server key "
- Đối với IOS thì các bạn cần import APNs cetificate vào(bao gồm file .p12 và password) FCM sẽ connect qua Apple center để verify thông tin khi các bạn add IOS App và Cetificate nên các bạn cần đọc kỹ phần hướng dẫn của FCM mà mình có note ở trên
Như vậy config ở phía firebase gần như đã hoàn thành, bây giờ chúng ta sẽ đi tạo Method bắn notification.
Code server để bắn notification bằng API
Về phía FCM thì có hướng dẫn cách sử dụng API theo link sau. Còn ở phía server chúng ta sẽ làm gì.
- Tạo message dưới dạng Json
- Tạo function để sử dụng API của FCM.
- Tạo method để bắn message qua cho FCM Code như sau
public async Task Send(string notification) { var fcmKey = "Legacy server key" var http = new HttpClient(); http.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=" + fcmKey); http.DefaultRequestHeaders.TryAddWithoutValidation("content-length", notification.Length.ToString()); var content = new StringContent(notification, System.Text.Encoding.UTF8, "application/json"); var response = await http.PostAsync("https://fcm.googleapis.com/fcm/send", content); }
Note:
- notification => đây là 1 object đã được serializable thành string
- Legacy server key => các bạn vào tab Cloud Messaging của firebase để lấy (đọc lại phía trên)
- định dạng cho content gửi đi là "application/json" và được encode bằng UTF8
Ok vần phần server để bắn lên FCM đã xong giờ chúng ta sẽ đi tạo nội dung cho notification
render notification theo từng loại Application
1 với Android
public static string getAndroidMessage(string title, object data, string regId) { Dictionary<string, object> androidMessageDic = new Dictionary<string, object>(); androidMessageDic.Add("collapse_key", title); androidMessageDic.Add("title", title); androidMessageDic.Add("data", data); androidMessageDic.Add("to", regId); androidMessageDic.Add("delay_while_idle", true); androidMessageDic.Add("time_to_live", 125); androidMessageDic.Add("dry_run", false); return JsonConvert.SerializeObject(androidMessageDic); }
Các parameter cần chú ý như sau:
androidMessageDic.Add("to", regId);
Chúng ta sẽ truyền Device_id vào đây để FCM biết là chúng ta sẽ bắn tới device nào.
androidMessageDic.Add("data", data);
Đây là nơi chứa custom data chúng ta truyền xuống theo notification
Còn về phía IOS sẽ có khác 1 chút
public static string getAppledMessage(string title, object data, string regId) { Dictionary<string, object> notification = new Dictionary<string, object>(); Dictionary<string, object> appMessageDic = new Dictionary<string, object>(); notification.Add("title", title); notification.Add("body", "Ấn vào để xem"); notification.Add("sound", "adcmover_notify_sound.m4r"); notification.Add("mutable_content", true); notification.Add("badge", 1); appMessageDic.Add("priority", "high"); appMessageDic.Add("notification", notification); appMessageDic.Add("data", data); appMessageDic.Add("to", regId); return JsonConvert.SerializeObject(appMessageDic); }
Do phía bên IOS thì các notification đều được fomart về kiểu APS nên chúng ta phải config đúng theo như hướng dẫn của firebase:
- Các thông tin của notification được thiết lập trong key "notification", FCM sẽ dựa vào đây để fomart lại về định dạng của APS
- Các custom data sẽ được lưu bằng key "data"
Như vậy là phía bên server đã xong còn phía client (Android và IOS ) cần làm gì Các thí chủ vui lòng đọc ở đây:
Các bạn note lại qu trình như này.
- Client sẽ đăng ký device_id(android), device_token(IOS) lên cho FCM
- Server chúng ta sẽ bắn notification lên cho FCM
- FCM sẽ đọc request và xử lý
- fomart lại định dạng của notification
- xác định xem device có đang link tới FCM ko
- FCM tiến hành bắn notification tới device_id chỉ định với fomart phù hợp
Như vậy là xong chúc các bạn thành công.