+1

Gửi notification bằng firebase trong rails

Hôm nay mình xin hướng dẫn các bạn cách gửi 1 notification từ ứng dụng rails của mình tới các thiết bị android, và ios bằng firebase .

Đầu tiên bạn cần làm là truy cập http://firebase.com/ để đăng kí 1 tài khoản ( có thể sử dụng trực tiếp bằng tài khoản google ).

Sau đó tạo 1 project bất kì. Tiếp theo tạo một app trong project đó, nếu ứng dụng bên client là android thì chọn android, hay ios, web thì chọn tương ứng.

Sau khi tạo thì click vào app vừa tạo, chọn manage, và việc bây giờ là bạn cần lấy server key, đây là key để rails và app mobile của bạn trao đổi dữ liệu.

Ngoài ra bạn cũng cần 1 client key nữa để xác định client mà bạn sẽ gửi noti tới, key này sẽ do bạn sử dụng mobile app khi đăng kí sẽ có.

Bài viết này mình chỉ hướng dẫn gửi noti từ rails, còn mobile nhận thế nào bạn có thể tham khảo ở trên mạng rất nhiều.

Sau khi đã có server key thì chúng ta sẽ bắt tay vào thiết lập phương thức để gửi.

  require "uri"
  require "net/http"
  require "net/https"

  uri = URI.parse "https://fcm.googleapis.com/fcm/send"
  https = Net::HTTP.new $uri.host, $uri.port
  https.use_ssl = true
  https.verify_mode = OpenSSL::SSL::VERIFY_NONE
  request = Net::HTTP::Post.new $uri.path

  request.add_field "Content-Type", "Authorization"
  request["Content-Type"] = "application/json"
  request["Authorization"] = "key=#{server_key}"

Ở trên mình tạo 1 request https với phương thức POST để đẩy dữ liệu lên. server_key chính là server key mà chúng ta vừa lấy được khi tạo app trên firebase. Đã khởi tạo request xong, giờ chúng ta chèn dữ liệu và gửi thôi.

      request.body = {
      registration_ids: ["#{notification_token}"],
      notification: {
        title: "Title của noti",
        body: "Nội dung của noti",
      },
      data: {
       # đây là nơi bạn muốn truyền thêm các tham số tùy ý
      },
      time_to_live: 3600,
      priority: "HIGH"
    }
    request.body = request.body.to_json
    response = https.request request

Ở trên, notification_token chính là key của mobile app khi bạn đăng kí với firebase.

Tiếp theo mình sẽ hướng dẫn nhận noti, cụ thể là bên android.

Ở lần khởi động app, FCM SDK sẽ tạo ra một token cho mỗi thiết bị. Mã token này được dùng khi ta muốn tập trung vào các thiết bị riêng lẻ hoặc tạo một nhóm các thiết bị.

Bạn có thể lấy giá trị token này bằng cách tạo một Class kế thừa FirebaseInstanceIdService. Ở lớp này, gọi hàm getToken bên trong hàm onTokenRefresh:

Ví dụ: đoạn code hiển thị giá thị token @Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); }

Đăng kí service vừa tạo ra vào file manifest: @Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken);

// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);

}

XỬ LÝ CÁC MESSAGE Nếu bạn muốn xử lý message mà notification gửi về khi app đang mở. Ta cần tạo một Service kế thừa FirebaseMessagingService, tiếp theo Override hàm onMessageReceived để xử lý khi có message đến

@Override public void onTokenRefresh() {

// Get updated InstanceID token.

String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);

// TODO: Implement this method to send any registration to your app's servers.

sendRegistrationToServer(refreshedToken);

}

Khai báo service trong manifest:

<service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service>

Vậy là mình đã hướng dẫn xong cách gửi noti từ rails. Thank you.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.