Как запускать уведомления из моего бэкэнда с помощью Firebase?

#android #angular #firebase #ionic-framework #firebase-cloud-messaging

# #Android #angular #firebase #ionic-framework #firebase-облако-обмен сообщениями

Вопрос:

Я разрабатываю push-уведомления для своего приложения Ionic. У меня есть служба уведомлений, в которой у меня:

 // Get permission from the user
  async getToken() {
    let token;
    if (this.platform.is('android')) {
      token = await this.firebase.getToken();
    }
    if (this.platform.is('ios')) {
      await this.firebase.grantPermission();
      token = await this.firebase.getToken();
      // await this.firebaseNative.grantPermission();
    }
    console.log('Saving token '   token   ' to Firebase and Askme');
    return this.saveTokenToFirestore(token);
  }


  // Save the token
  private saveTokenToFirestore(token: string){
    if(!token){
      return;
    }
      const devicesRef = this.firestore.collection('devices');
      if (this.licenseService.currentLicense) {
          this.configService.getStoredUsername(this.licenseService.currentLicense.referenceURL).then((username: string) => {
            const docData = {
                token,
                userId: username,
            };
            return  devicesRef.doc(token).set(docData);
          });
      }
  }

  // Listen to incoming FCM messages
  onNotifications() {
    return this.firebase.onMessageReceived();
  }
 

И в моем app.component:

 // Get a token
      this.notservice.getToken();

      this.notservice.onNotifications().pipe(
        tap(async msg => {
          const toast = await this.toastController.create({
          message: msg.body,
          duration: 5000
          });
          toast.present();
        })
      )
    .subscribe();
      });  
 

В настоящее время я получаю push-уведомления с консоли Firebase, но я хотел бы подключить Firebase к своему серверу приложений. У меня есть метод, который возвращает сообщения, и это:

 onMessage:(msg) => {
            this.receiveMessage(msg);
 

Как я могу связать этот метод с моей конфигурацией Firebase, чтобы увидеть это сообщение в качестве push-уведомления?
Мне практически нужно запускать уведомления из моего бэкэнда.

Большое спасибо

Ответ №1:

Вы можете запускать уведомления через Firebase, используя облачные функции Firebase:

Ниже приведен пример в NodeJS :

 const functions = require('firebase-functions');

const admin = require('firebase-admin');
admin.initializeApp();

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
exports.sendPush = functions.https.onRequest(async (request, response) => {
  functions.logger.info("Hello logs!", {structuredData: true});
  const categoryId = request.query.categoryId;

  const topicName = 'status_all';
  const payload = {
    data : {
      sound: "default",
      categoryId: categoryId
    }
  }

  admin.messaging().sendToTopic(topicName,payload).then(function(res){
    response.send('Success: '   res);
  })
  .catch(function(err){
    response.send('Error: '   err);
  });
});
 

Когда вы развернете это, это даст вам конечную точку. Вы можете вызвать эту конечную точку из бэкэнда, чтобы запустить уведомление, или вы можете написать cron на своем бэкэнд-сервере, который будет запускать это с определенным интервалом.


Если вам нужно только протестировать свою реализацию уведомлений, запустив уведомление через бэкэнд, вы можете следовать этому подходу. https://apoorv487.medium.com/testing-fcm-push-notification-through-postman-terminal-part-1-5c2df94e6c8d

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

1. ваш ответ вообще не касается вопроса

2. @Llama Я объяснил, как отправлять уведомления с помощью облачных функций Firebase, которые являются бэкэндом. Пользователь может вызвать это со своего сервера, что, как я полагаю, является целью.

3. @Llama Из упомянутого вопроса «Мне практически нужно запускать уведомления из моего бэкэнда», я понял только это. Триггеры, такие как триггер базы данных и т. Д., Там не упоминаются. Не могли бы вы помочь мне понять, если я что-нибудь упущу?