Javascript/Node.js

[Node.js] FCM(Firebase Cloud Messaging)토큰으로 백그라운드 앱에 메시지 보내기

Frankie 2021. 11. 4. 16:55

B라는 사람한테 어떠한 메시지를 전달하는 두 가지 경우를 먼저 생각해보면

1. A가 B에게 개인적인 메시지를 전달하기 위해서, 앱을 사용하고, 서비스를 하는 회사의 서버를 거쳐서 B에게 가는 방법( A-> 서버 -> B)

2. 앱에서 사용자에게 무엇인가 홍보하기 위해서, 회사의 서버에서 B에게 메시지를 보내는 방법(서버 -> B)

이 있습니다.

 

하지만 메시지를 실시간으로 전달받게 하려면, B는 서버에 계속 접속해야 하는데 이러면 배터리나 네트워크 사용으로 인해 문제가 발생할 겁니다. 그래서 중간에 Firebase 서버(혹은 구글 클라우드 서버)가 문제를 해결해줍니다.

 

모든 앱들은

(1) A -> 서버 -> Firebase 서버 -> B

(2) 서버 -> Firebase 서버 -> B

이런 방식으로 실시간으로 B에게 메시지를 보내고 있습니다.

 

앱에서 홍보를 할 때는 서버 없이 Firebase 콘솔에서 바로 B로 보낼 수 있습니다.

(3) Firebase 서버 -> B

 

----------------------------------------------------------------------------------------------------------------------

 

그러면 이제 서버에서 백그라운드 앱에 테스트 메시지 보내는 방법을 보겠습니다.

 

우선 IOS와 안드로이드에서 FCM Token을 생성해서 DB에 저장이 되어있어야 합니다.

이 부분은

https://firebase.google.com/docs/web/setup?hl=ko 

 

자바스크립트 프로젝트에 Firebase 추가  |  Firebase Documentation

Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register 의견 보내기 자바스크립트 프로젝트에 Firebase 추가 이 가이

firebase.google.com

에서 보고 진행하시면 됩니다.

 

1. Node 서버에 firebase-admin 을 설치합니다.

npm install firebase-admin --save

2.

(1) Firebase 페이지에서 톱니바퀴 아이콘을 클릭

(2) <프로젝트 설정>으로 들어갑니다.

(3) <서비스 계정>을 들어가서 Node.js를 선택

(4) 아래에 <새 비공개 키 생성>을 클릭해서 키 파일을 다운로드 받습니다.

 

이제 서버 단에서 코드를 입력해서 메시지 푸시를 보냅니다.

const firebaseAdmin = require('firebase-admin');
const serviceAccount = require('./받은 키파일.json');
firebaseAdmin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
});

const fcmToken = 'FCM토큰';
const message = {
    notification: {
        title: '시범 데이터 발송',
        body: '클라우드 메시지 전송이 잘 되는지 확인하기 위한, 메시지 입니다.'
    },
    token: fcmToken
};

// Send a message to the device corresponding to the provided
// fcm token.
firebaseAdmin.messaging().send(message)
    .then((response) => {
         // Response is a message ID string.
         console.log('Successfully sent message:', response);
    })
    .catch((error) => {
         console.log('Error sending message:', error);
    });

이제 이 코드를 실행해서 라우터를 통해서 메시지를 보내면 핸드폰에서 알림이 뜨는 것을 확인할 수 있습니다.

'Javascript > Node.js' 카테고리의 다른 글

Promise.all()  (0) 2021.11.02
[mac/vscode] 프로젝트마다 node 버전 다르게 사용하는 방법  (0) 2021.10.26
모듈 시스템  (0) 2021.09.30
promise API  (0) 2021.09.28
콜백  (0) 2021.09.27