#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
коллекции, не вызовет облачную функцию.