облачная функция с использованием typrescript и if statment

#firebase #flutter #google-cloud-firestore #google-cloud-functions #firebase-cloud-messaging

#firebase #флаттер #google-cloud-firestore #google-cloud-функции #firebase-cloud-обмен сообщениями

Вопрос:

здравствуйте, я новичок в облачных функциях, и я хочу спросить, есть ли какие-то причины для получения более одной темы в одном заявлении if вот моя облачная функция :

 import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();

const fcm = admin.messaging();

export const sendToTopic = functions.firestore
  .document("Doctor2019/{documentId}")
  .onCreate(async snapshot => {

    const payload: admin.messaging.MessagingPayload = {
      notification: {
        title: 'NEW POST!',
        body: `Click here to see New Post`,
        icon: 'your-icon-url',
        click_action: 'FLUTTER_NOTIFICATION_CLICK'
      }
    };

    return fcm.sendToTopic('Doctor2019', payload);
  });


  

проблема в том, что у меня более одной темы, что я хочу сделать, это проверить создание документа в других коллекциях и отправить уведомление на основе этого, я действительно не знаю, что делать, любая помощь?

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

1. Итак, вы спрашиваете, как if это работает? developer.mozilla.org/de/docs/Web/JavaScript/Reference /…

2. нет, мой вопрос в том, каким будет алгоритм, потому что я, похоже, не могу понять это

Ответ №1:

Я вижу, что вы хотите отправлять сообщения в разные темы на FCM, которые привязаны к разным созданиям документов.

Вы не можете использовать одну функцию для достижения этой цели, поскольку функция привязана к созданию документов в определенной коллекции. что вам нужно будет сделать, так это создать разные функции для разных коллекций.

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

1. спасибо за понимание того, что я хочу. это реально?

2. мультифункции увеличат счет, не так ли?

3. да, вы не можете определить более одного триггера для функции. на ваш вопрос о счете, если у вас одна функция или много функций и использование одинаковое, то выставление счетов будет таким же. выставление счетов за облачную функцию зависит от того, сколько раз вы вызываете функцию, и если функция не вызывается, то вы платите 0. подробнее о выставлении счетов читайте здесь . кроме того, обратите внимание, у вас очень щедрый бесплатный уровень

4. да, я видел выставление счетов, и есть пара вещей, которые я не понял, не могли бы вы прояснить это для меня? если да, я хочу знать, что мое приложение получает уведомления только для пользователей, когда происходит определенное событие, и в моем случае это создание документа, не будет ли добавление большого количества функций увеличивать вычислительное пространство и время? и функции не будут вызываться часто, возможно, 4 или 5 раз в месяц для каждой функции

Ответ №2:

Если я правильно понимаю вашу цель, вы можете использовать a {wildcard} вместо идентификатора документа, а также вместо идентификатора коллекции. Затем вы используете context объект для получения значения идентификатора коллекции следующим образом:

 export const sendToTopic = functions.firestore
    .document("{collectionId}/{documentId}")
    .onCreate(async (snap, context) => {  // Note the addition of context

        const collectionId = context.params.collectionId;
        
        const payload: admin.messaging.MessagingPayload = {
            notification: {
                title: 'NEW POST!',
                body: `Click here to see New Post`,
                icon: 'your-icon-url',
                click_action: 'FLUTTER_NOTIFICATION_CLICK'
            }
        };

        return fcm.sendToTopic(collectionId, payload);
    });
  

Если у вас есть корневые коллекции, которые не должны запускать сообщение, просто адаптируйте свою модель данных и сделайте коллекции, которые должны запускать сообщение, вложенными в определенный документ. Что-то вроде:

 export const sendToTopic = functions.firestore
    .document("messagingTriggers/triggers/{collectionId}/{documentId}")
    .onCreate(async (snap, context) => {...});
  

Тогда любое создание документа, например, в users коллекции, не вызовет облачную функцию.