🚀 프론트앤드에서 유저의 디바이스 토큰을 보내준다는 가정하에 진행한다.
firebase 공식문서에 정리가 잘 되어있어서 한 번 그대로 진행해본다.
firebase 콘솔에서 내 프로젝트 > 설정 > 프로젝트 설정
으로 들어간다.
서비스 계정 > 새 비공개 키
생성 버튼 클릭
키 생성
버튼 클릭
그러면 내 로컬에 서버 키 파일.json 이 생긴다.
이 파일은 추후 재발급이 불가능하다고 하니 잘 보관해준다. (프로젝트에 넣을 예정)
firebase-admin 패키지를 설치해준다.
npm i firebase-admin
먼저 다운받은 서버 키를 프로젝트 안에 넣어준다.
나는 configs
폴더 안에 firebase-admin.json
이라는 이름으로 넣었다.
import admin from 'firebase-admin';
const serviceAccount = require('./configs/firebase-admin.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
새 비공개 키를 만들 때 적혀있던 코드 스니펫을 이용하여 서버 키를 import 해주고 서버 키를 이용해 credential 설정을 해준다.
async sendPushNoti(email: string) {
const targetMember = await this.memberService.findMemberByEmail(email);
const message = {
notification: {
title: '테스트 제목입니다.',
body: '푸시알림 내용입니다.',
},
token: targetMember.fcmToken, // user 의 device token 을 넣어준다.
};
admin
.messaging()
.send(message)
.then(function (response) {
console.log('Successfully sent message: : ', response)
})
.catch(function (err) {
console.log('Error Sending message!!! : ', err)
})
}
유저 email 으로 DB 에 저장되어있는 유저의 디바이스 토큰을 이용해 푸시 알림을 생성한다.
ios 기준 정상적으로 푸시 알림이 뜨는 것을 확인할 수 있다.
해당 내용은 앱이 화면에 떠있지 않은 상태, 즉 백그라운드 상태일 때만 heads up 알림이 생성된다. 앱이 실행 중일 때(포그라운드) 알림을 뜨게 하려면 공식 문서에 적힌 것처럼 data 라는 key 에 정보를 담아서 프론트에 보내주고 콜백으로 해당 메세지를 받아야한다.