본문 바로가기

사이드 프로젝트

[위로 개발일지 2편] FCM 메시징 요청을 위한 node.js 서버 구현하기

 

지난 글에서 FCM 세팅 방법에 대해 이야기했다.

이번에는 원하는 유저에게 알맞은 메시지를 가공해서 푸시 알림을 줄 수 있도록 FCM에 요청하는 간단한 서버 구현 과정을 기록해보겠다. (서버라고 하기에도 민망한 50~60줄짜리 js코드지만 iOS 개발자인 내겐 완전히 새로운 경험이었다)

 

0. 서버 왜 필요하지?

FCM이 알아서 다 해주는 거 아니야? 라고 생각할 수 있는데 FCM 구성요소는 아래 두 가지다.

  • Google에서 제공하는 FCM 백엔드
  • 서버 로직이 실행되는 앱 서버 또는 다른 신뢰할 수 있는 서버 환경

앱 서버 또는 신뢰할 수 있는 서버 환경에서 FCM백엔드로 메시징 요청을 보내고 FCM 백엔드는 사용자 기기에서 실행되는 클라이언트 앱에 메시지를 보낸다.

여기서 1번

결국 나는 FCM이 다 해주길 기대했지만(?) 나만의 서버가 필요한 것이었다. 흑흑

 

1. Firebase Admin SDK 설치

(node 설치는 완료되었다고 가정한다)

Firebase Admin Node.js SDK는 npm으로 제공된다. 아래와 같이 SDK를 설치해주자.

$ npm install firebase-admin --save

 

그리고 나의 server.js 코드에서 require로 가져와준다.

const { initializeApp } = require('firebase-admin/app');

 

Firebase > Project Overview > 톱니바퀴 > Project settings > Service accounts로 가보자.

위 사진처럼 SDK private key를 생성할 수 있는 버튼이 있다. 버튼을 눌러 private key를 생성한다. 그리고 다운로드하여 데스크탑에 저장해 주자.

 

그리고 다시 server.js로 돌아와 아래처럼 private key를 amin에 초기화시켜준다.

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

const serviceAccount = require("path/to/privateKey.json");
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});

 

2. FCM에 메시징 요청

이제 내가 구현한 (작고 귀여운) 서버와 Firebase 간의 연결이 만들어졌으니, FCM 백엔드에 푸시 알림을 보내라고 메시징 요청을 하면 된다.

let token = "fcmToken"   // 푸쉬를 보내고자 하는 타겟 디바이스의 토큰

var pushNotification = {
  notification: {
    title: messageTitle, // 푸쉬알림 타이틀
    body: messageBody    // 푸쉬알림 내용
  },
  token: token
};

admin.messaging().send(pushNotification)
  .then(function(response) {
    console.log(' success')
  })
  .catch(function(error) {
    console.log(' fail' + error)
  });

 

 

마지막으로 node server.js 커맨드를 통해 실행시키면 내 서버 -> FCM -> 디바이스 경로를 통해 푸시 알림이 전송된다!