Интеграция уведомлений firebase в nest js

#node.js #firebase #firebase-cloud-messaging #nestjs

#node.js #firebase #firebase-облачный обмен сообщениями #nestjs

Вопрос:

Я пытаюсь создать API fcm с использованием nest js, который я использую в flutter. Я новичок в Nest js, и я реализовал код, используя это. В моем коде нет ошибки, но я не получаю уведомление на свой телефон Ниже приведен мой служебный файл, в котором я реализовал push-уведомление

  async sendMessageToUser(registrationToken) {
     
      var message = {
        android: {
        ttl: 3600 * 1000, // 1 hour in milliseconds
  
        data: {
        title: "hiii",
        body: "hello",
       
        }
        
         },
        apns: {
        headers: {
        'apns-priority': '10'
        },
        payload: {
        "aps": {
        "alert": {
        "body": "hii",
        "title": "hello"
        },
        "sound": "dafault",
        
        }
        }
        },
        token: registrationToken
        };
      
      
    
      
      // Send a message to the device corresponding to the provided
      // registration token with the provided options.
      try{
        Logger.log("FIrst try catch");
        await admin.messaging().send(message);
        try {
          Logger.log("second try catch");
          
        } catch (error) {
          Logger.error(error);
        }
      }catch (error) {
        Logger.error(error);
      }
     
     
  }
  

файл main.ts

 import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import admin, { ServiceAccount } from 'firebase-admin';

async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    app.useGlobalPipes(new ValidationPipe());
    
  
  // Set the config options
  const adminConfig: ServiceAccount = {
    "projectId":"my firebase projetId", 
    "privateKey": "private key".replace(/\n/g, 'n'),
    "clientEmail": "firebase client email",
  };
  // Initialize the firebase admin app
  admin.initializeApp({
    credential: admin.credential.cert(adminConfig),
    databaseURL: "db url",
  });

  app.enableCors();
  await app.listen(3000);
}
bootstrap();
  

может кто-нибудь сказать мне, что не так с моим кодом, почему я не получил уведомление на свой телефон?

Комментарии:

1. Вы пробовали печатать результаты admin.messaging().send()?

Ответ №1:

Создайте модуль для инициализации приложения Firebase firebase.module.ts

 import {ApiConfigService} from '@config/config.service'
import {Module} from '@nestjs/common'
import * as admin from 'firebase-admin'
import * as adminConfig from 'firebase-creds.json'

@Module({})
export class FirebaseModule {
  constructor(configService: ApiConfigService) {
    admin.initializeApp({
      credential: admin.credential.cert(adminConfig),
      databaseURL: "db URL",
    })
  }
}
  

А затем использовать его таким образом app.module.ts

 @Module({
  imports: [
    FirebaseModule,
    ...
  ],
})
export class AppModule {}
  

После этого вы сможете использовать его в любой службе, которую вы хотите, как admin.messaging().sendtodevice, как вы делаете в своем коде