[ Node.js ] 푸시 알림 구현하기

황승환·2021년 8월 11일
0

Node.js

목록 보기
12/13

푸시 알림

푸시 알림은 앱이나 웹에서 사용자에게 메세지 형태로 알림을 주는 것을 말한다.

FCM (Firebase Cloud Messaging)

Firebase 클라우드 메시징(FCM)은 무료로 메시지를 안정적으로 전송할 수 있는 교차 플랫폼 메시징 솔루션이다.

FCM을 사용하면 새 이메일이나 기타 데이터를 동기화할 수 있음을 클라이언트 앱에 알릴 수 있다. 이렇게 알림 메시지를 전송하여 사용자를 유지하고 재참여를 유도할 수 있다.

주요 기능

  • 알림 메시지 또는 데이터 메시지 전송
    -> 사용자에게 표시되는 알림 메시지를 전송하거나 데이터 메시지를 전송하고 애플리케이션 코드에서 임의로 처리한다.
  • 다양한 메시지 타겟팅
    -> 단일 기기, 기기 그룹, 주제를 구독한 기기 등 3가지 방식으로 클라이언트 앱에 메시지를 배포할 수 있다.
  • 클라이언트 앱에서 메시지 전송
    -> 기기에서 다시 서버로 확인, 채팅, 기타 메시지를 보낼 수 있다.

구현 순서

  1. FCM SDK 설정
    -> 플랫폼에 맞는 설정 안내에 따라 앱에서 Firebase 및 FCM을 설정한다.
  2. 클라이언트 앱 개발
    -> 클라이언트 앱에 메시지 처리, 주제 구독 로직 또는 기타 선택사항 기능을 추가한다.
  3. 앱 서버 개발
    -> 인증, 보내기 요청 작성, 응답 처리 등을 수행하는 전송 로직을 만들 때 Firebase Admin SDK를 사용할지 아니면 서버 프로토콜 중 하나를 사용할지 결정하고 신뢰할 수 있는 환경에 로직을 구축한다. 클라이언트 애플리케이션에서 업스트림 메시징을 사용하려면 XMPP를 사용해야 하며 Cloud Functions는 XMPP에 필요한 영구적 연결을 지원하지 않는다.

푸시 알림 구현

  1. Firebase 사이트에서 프로젝트를 생성해준다.
    Firebase

  2. 사용하고자 하는 앱에 Firebase를 추가해준다.

  3. 클라이언트는 다음 코드를 통해 디바이스 토큰을 받는다.

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task -> 
	if (!task.isSuccessful) { 
    		Log.w(TAG, "Fetching FCM registration token failed", task.exception) 
        	return@OnCompleteListener 
        } // Get new FCM registration token 
        val token = task.result // Log and toast 
        val msg =token.toString(); 
        Log.d(TAG, msg) 
        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show() 
})
  1. 새 비공개 키를 생성하고 다운로드 해준다.

  2. firebase 모듈을 다운로드 해준다.
    sudo npm install firebase --save

  3. 다운 받은 비공개키의 경로를 다음과 같이 정의해준다.

const admin = require("firebase-admin"); 
let serviceAccount = require("./firebase-admin.json"); 
admin.initializeApp({ 
  credential: admin.credential.cert(serviceAccount), 
});
  1. router.js
app.get('/app/push', user.pushAlarms)
  1. controller.js
exports.pushAlarms = async function(req, res){
    let deviceToken=`token값 입력`

    let message = {
        notification:{
            title: 'PushAlarms Test',
            body:'Check your CoupangEats',
        },
        token:deviceToken,
    }

    admin
        .messaging()
        .send(message)
        .then(function(response){
            console.log('Successfully sent message:', response)
            return res.status(200).json({success: true})
        })
        .catch(function(err) {
            console.log('Error Sending message!!! : ', err)
            return res.status(400).json({success: false})
        });
}

deviceToken에 특정 유저의 토큰 값을 넣게 되면 그 유저에게 푸시 알람이 전달된다.

실제로 실행하기 위해서는 디바이스 토큰 값을 로그인을 할 때 클라이언트 쪽에서 받아서 유저 DB에 디바이스 토큰 값을 같이 저장해야 한다.

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글