[Node.js] FCM을 이용해서 PUSH 메세지 보내기

이애옹·2024년 9월 12일
0
post-custom-banner


이미지 출처 : _im_ssu.log


FCM을 이용해 PUSH 메세지를 보낼 일이 있어서 정리 해 뒀다!

📝 FCM이란?

FCM(Firebase Cloud Messaging)은 Google Firebase에서 제공하는 무료 클라우드 메세징 서비스로,
개발자가 Android, iOS, 웹애플리케이션 등에 푸시 알림을 전송 할 수 있게 해준다.

📌 FCM을 이용해 PUSH를 보내는 단계

FCM을 이용해 메세지를 보내는 과정은 다음과 같다!
(Firebase 프로젝트가 생성 되어 있다는 가정하에!)

  1. 클라이언트 앱에서 FCM 서버와 통신하기 위한 FCM 등록 토큰을 획득한다.

  2. 획득한 토큰을 서버로 전송 해 DB에 저장한다.

  3. 클라이언트 앱으로 메세지를 전송하기 위해 서버에서 메세지 데이터 + 토큰을 보내 전송을 요청한다.

  4. 클라우드는 요청받은 메세지를 토큰에 해당하는 단말기에 전송한다.

여기서, Front에서 토큰을 받아서 DB에 저장하는 과정은 API로 처리가 완료 된 상태이므로 나는 이 TOKEN을 꺼내서 PUSH 메세지를 보내는 과정만 정리 해 두려고 한다.

📝 PUSH 메세지 전송하기

📌 관련 패키지 다운받기

일단 firebase-admin 패키지를 다운 받아준담

npm install firebase-admin --save

📌 Service Account 파일 세팅하기

이제 Service Account 파일을 다운받아줘야 한다!

Service Account 파일은 Firebase Admin SDK를 사용하여 서버 측에서 FCM과 같은 Firebase 서비스를 이용할 때 필요합니다. 일반적으로 서버에서 Firebase API에 직접 접근할 때 사용하는 인증 방식입니다.

Service Account 파일은 백엔드에서 Firebase Admin SDK를 사용할때 필요하다고 한당.

나도 Node.js 에서 PUSH 기능을 구현하고 있기 때문에 해당 파일을 받아서 연결 해 줬다~
(클라이언트측에서 PUSH를 보낼 경우 인증 불필요,
Firebase SDK가 자동 인증을 처리 해 준다고 한다.)

해당 파일은 Firebase 콘솔 접속 후,
[프로젝트 설정] > [서비스 계정] > [새 비공개 키 생성]
하면 키 생성이 가능하다.

해당 키는 한번만 받을 수 있다고 하니 잘 보관 해 두시길

📌 PUSH 메세지 전송하기기

이제 해당 파일을 본인 프로젝트에 넣어둔뒤,

const admin = require('firebase-admin');

// 서비스 계정 키 파일 경로 추가
const serviceAccount = require('../firebase-admin.json');

// Firebase Admin SDK 초기화 추가
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});

이렇게 선언 해 주면 PUSH 메세지 보낼 준비는 완료

이제 메세지를 보내주는 부분을 구현 해 주면 된다.

const message = {
  notification: {
    title: 'FCM Test',
    body: 'This is a test message'
  },
  token: 'FCM_DEVICE_TOKEN'
};

admin.messaging().send(message)
  .then((response) => {
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

이런식으로 title과 body 메세지를 정해 준 뒤,
PUSH 메세지를 받을 회원의 token 정보를 넣어주면 된닷

혹시 해당 PUSH를 클릭했을때, 앱의 특정 경로로 이동 해야 할 경우
data를 추가로 선언 해 주면 된다 ! ㅎ.ㅎ

profile
안녕하세요
post-custom-banner

0개의 댓글