NestJS에 fcm 적용하기

gwanhun·2023년 10월 26일
  • 파이어베이스 콘솔에서 프로젝트 설정 -> 서비스계정에 들어가서 새 비공개 키를 발급해 다운 받는다.
  • firebase폴더를 만들고 폴더안에 발급받은 키 파일을 넣는다.
  • fcm.service.ts를 작성한다.
    import { Injectable } from '@nestjs/common/decorators/core/injectable.decorator';
    import { Inject, Logger } from '@nestjs/common';
    import * as firebaseConfig from './firebase.config.json';
    import * as admin from 'firebase-admin';
    
    const firebase_params = {
      type: firebaseConfig.type,
      projectId: firebaseConfig.project_id,
      privateKeyId: firebaseConfig.private_key_id,
      privateKey: firebaseConfig.private_key,
      clientEmail: firebaseConfig.client_email,
      clientId: firebaseConfig.client_id,
      authUri: firebaseConfig.auth_uri,
      tokenUri: firebaseConfig.token_uri,
      authProviderX509CertUrl: firebaseConfig.auth_provider_x509_cert_url,
      clientC509CertUrl: firebaseConfig.client_x509_cert_url,
    };
    
    @Injectable()
    export class FcmService {
      constructor() {
        admin.initializeApp({
          credential: admin.credential.cert(firebase_params),
        });
      }
      async fcm(token: string, title: string, message: string) {
        const payload = {
          token: token,
          notification: {
            title: title,
            body: message,
          },
          data: {
            body: message,
          },
        };
        console.log(payload);
        const result = await admin
          .messaging()
          .send(payload)
          .then((response) => {
            // Response is a message ID string.
            // console.log('Successfully sent message:', response);
            // return true;
            return { sent_message: response };
          })
          .catch((error) => {
            // console.log('error');
            // console.log(error.code);
            // return false;
            return { error: error.code };
          });
        return result;
      }
    }

참고 : https://noonestaysthesame.tistory.com/m/17

https://firebase.google.com/docs/cloud-messaging/send-message?hl=ko

profile
주니어 백앤드 개발자

0개의 댓글