-
[FCM] FCM으로 Notification 구현하기 - 2(Firebase functions 셋팅)Kotlin 2025. 9. 24. 08:00728x90반응형
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-tools4. 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 작성은 다음 글에...
반응형'Kotlin' 카테고리의 다른 글
[Kotlin] 지연초기화(lateinit, by lazy), 위임(by) (0) 2024.12.20 [Kotlin] Custom Getter, Setter (1) 2024.12.19 [Kotlin] Scope functions(let, also, apply, with, run, use) (1) 2024.12.03 [kotlin] String.format (3) 2024.11.07 [Kotlin] 기본타입(Primitive Types) (3) 2024.09.28