ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [FCM] FCM으로 Notification 구현하기 - 2(Firebase functions 셋팅)
    Kotlin 2025. 9. 24. 08:00
    728x90
    반응형

    FCM으로 알림을 구성하기 전에 어떤 흐름인지 잘 이해가 안 되서 써치를 많이 해보았다

    FCM의 경우 다음과 같은 흐름으로 진행이 된다고 이해했다

     

    출처 : 나

     

    1. FCM Server에 token을 요청한다

    요청한 기기마다 고유한 토큰을 주는 듯

     

    2. 토큰을 FCM server로부터 받는다

    나같은 경우는 받은 토큰을 preference에 저장했다

     

    3. 서버에 토큰 저장 및 토큰을 보내 push message 요청

    이라고 적었지만 실제 구현을 해보았을 때는 살짝 달랐다

    나의 경우 서버가 따로 없었기때문에 Firebase Functions를 사용했고, fireStore에 Token이라는 collection을 따로 만들어 userId와 token을 저장했다

    하지만 Firebase Functions에서 제공하는 fireStore 트리거 함수인 onDocumentCreated나 onDocumentUpdated를 사용해 특정한 document가 update되거나 create될 때(변화가 생기면) 바로 작성한 functions를 실행하기 때문에 따로 push message에 대한 요청을 클라이언트쪽에서 하지 않았다

    또한 작성한 functions에서도 token 값을 따로 받지 않게끔 UserId를 통해 token collection에서 해당하는 유저의 토큰값을 가져올 수 있게 했다

     

    4.push message 생성 및 FCM server에 push message 전달 

    나의 경우 firebase functions를 사용했기 때문에 functions 안에서 FCM server로 보낼 push message를 작성했고, 토큰값을 포함해 FCM server로 보냈다

     

            const message = {
                data: {
                  title: "새로운 좋아요 도착!",
                  body: `${likeUserName}님이 게시글 "${postTitle}"에 좋아요❤️를 눌렀습니다`,
                  type: "Likes",
                  postId: postId,
                  libraryName: libraryName,
                  likeUserId: likeUserId
                },
                token: userSettings.token
            }
            await messaging.send(message)

     

    마지막에 messaging.send(message)에서 send()의 설명을 보면 FCM을 통해서 메세지가 보내진다고 되어있다

     

    5. App server에서 보낸 push message를 FCM server에서 기기로 보냄

    FCM server에서 token에 해당하는 기기로 보낸다!

     

    Firebase Functions를 사용한 이유는?

    일단 백엔드가 없이 빠르게 구현할 수 있기 때문에 선택했던 게 첫 번째 이유이다

    그 다음으로는 기존의 프로젝트로 fireStore와 firebaseStorage를 사용하고 있었고 이를 트리거하는 API들을 제공해주기 때문에 알림을 구현할 때 훨씬 쉽게 구현할 수 있기 때문이었다

    또한 javaScript나 typeScript를 지원해주기 때문이다 

     


     

    firebase functions를 사용하기 위해서는 요금제를 변경해야한다

    나의 경우 무료 요금제에서 Blaze 요금제로 변경을 했다

    참고로 사용한 만큼만 나오니까 너무 부담갖지 않아도 될거같다!

     

     

    firebase functions 초기 설정

    1. firebase 프로젝트를 생성한다

    2. Node.js 혹은 Python 둘 중 하나를 선택해서 해당 언어 환경 설정을 한다

    나의 경우 javascript로 할 것이기 때문에 Node.js와 npm이 설치되어있는지 확인을 한 후 진행했다

    3. Firebase CLI 설치

    npm install firebase-functions@latest firebase-admin@latest --save
    npm install -g firebase-tools

     

    4. Firebase login 및 init

    https://firebase.google.com/docs/functions/get-started?hl=ko#node.js_1

    위 주소의 3번을 참고해서 파이어베이스에 로그인을 해주고 functions를 초기화해준다

     

    5. index.js에 함수 작성

    4번까지 완료가 되었다면 이제 functions/index.js에서 함수를 작성해주면 된다

    참고로 node.js 18버전을 2025년도 초에 지원을 중단했다니까 버전이 18이라면 20이나 22로 변경해주자

     

    functions 작성은 다음 글에...

    반응형
Designed by Tistory.