[flutter] FCM 메세지 구조 및 전달

popolarburr·2023년 10월 26일
0
post-thumbnail

우선 Firebase Cloud Messaging에서 사용되는 구조를 알아보자


1. 구조


{
  "message": {
    "token": "bk3RNwTe3H0:CI2k_...",
    "notification": {
      "title": "Breaking News",
      "body": "New news story available."
    },
    "data": {
      "story_id": "story_12345"
    }
  }
}

보통은 이러한 형식의 JSON구조를 가진다.

  • message > token , notification, data

우선 내가 FCM서버와 연결하여 사용중인 스프링부트 서버(푸시 서버)에 작성한 코드를 확인해보자

public void sendPush(String tokenValue) throws FirebaseMessagingException {
        Notification notification = Notification.builder()
                .setTitle("hello world")
                .setBody("Send Test Messages")
                .build();

        Message message = Message.builder()
                .setToken(tokenValue)
                .setNotification(notification)
                .putData("Hello", "EveryOne!")
                .build();

        System.out.println("Send FCM for Server " + tokenValue);

        firebaseMessaging.send(message);
    }

2. 전달


해당 코드를 보면 우선 Notification인스턴스를 builder를 통해 만든다. 해당 인스턴스의 필드들을 보면 title과 body가 존재.


이게 실질적으로 우리가 보통 핸드폰이나 모바일기기에서 푸시 알람(=FCM 메세지, 메세지) 받을 때 나오는 내용들이다
즉, Notification은 푸시 알람에 대한 정보 및 푸시 알람의 표시에 사용되는 정보들이 담겨있다고 보면 된다.


그 다음 코드를 보면 Message 클래스의 인스턴스를 만드는 것으로 보인다.
해당 인스턴스에는 token과 notification을 set하는 부분이 있다.

FCM 특성상, 모바일 기기별로 토큰값이 달리하고, 특정 기기를 타겟으로 푸시 알람을 보내야하기 떄문에, 해당 메세지에 토큰값을 설정한다.

또한 setNotification에다가는 우리가 앞서 만든 Notification의 인스턴스를 넣게된다.


마지막으로 putData를 통해 실질적으로 푸시 서버에서 FCM서버로 보내고싶은 실제 정보들(update하고 싶은 값이나, 새로 넣고 싶은 값들?)을 넣고 보낸다. 나는 여기서 임시예제로 보여주기 위한 값들을 넣음.

그렇게 하고 firebaseMessaging.send(message)를 하면 해당 FCM서버에 메세지가 전송되고, 전송된 메세지는 FCM서버에서 해당 토큰값에 맞게 메세지를 전달한다.


3. 결론


메시지의 구조는 FCM 메시지를 위한 JSON 구조와 유사함. 따라서 Notification과 Message의 사용은 FCM 메시지의 notification 및 message 부분과 일치. 이렇게 설정된 메시지는 FCM 서버를 통해 해당 토큰 값을 가진 기기로 전달될 것이며, 기기에서는 푸시 알림이 표시되고 푸시 메시지의 내용이 표시될 것.

따라서 서버에서 메시지를 구성하고 FCM 서버로 보내면, 이러한 메시지가 원격 기기로 전달되는 것이 FCM의 작동 원리입니다.


4. 결과

플러터에서 작성된 디버깅용 임시 코드입니다



[Referrence] https://team-platform.tistory.com/23
[Firebase Docs] https://firebase.google.com/docs/cloud-messaging/flutter/receive?hl=ko

profile
차곡차곡

0개의 댓글