Я отправил следующее push-уведомление FCM в функции firebase:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
exports.newSubscriberNotification = functions.firestore
.document('messages/{id}')
.onUpdate(async event => {
const data = event.after.data();
const content = data ? data.content : '';
const toUserId = data ? data.toUserId : '';
const payload = {
notification: {
title: 'New message',
body: `${content}`
}
};
const db = admin.firestore();
const devicesRef = db.collection('devices').where('userId', '==', toUserId);
const devices = await devicesRef.get();
const tokens: any = [];
devices.forEach(result => {
const token = result.data().token;
tokens.push(token);
});
return admin.messaging().sendToDevice(tokens, payload);
});
В коде, который я использую .onUpdate, который, как я полагаю, должен срабатывать при обновлении коллекции сообщений. Это приложение для обмена сообщениями, поэтому при каждом обновлении коллекции сообщений я хотел бы инициировать push-уведомление для принимающего пользователя.
Я получаю tuUserId и использую его для получения токена устройства этого пользователя отколлекция устройств. Сейчас я тестирую, так что toUserId идентичен идентификатору от userId, потому что он просто использует мое устройство ... так что, надеюсь, когда я обновлю message.doc (), он отправит push-уведомление.
Вот сообщениеколлекция в базе данных:
Это журнал ошибок функции:
11:04:22.937 PM
newSubscriberNotification
Function execution started
11:04:22.946 PM
newSubscriberNotification
Error: Value for argument "value" is not a valid query constraint. Cannot use "undefined" as a Firestore value.
at Object.validateUserInput (/srv/node_modules/@google-cloud/firestore/build/src/serializer.js:273:15)
at validateQueryValue (/srv/node_modules/@google-cloud/firestore/build/src/reference.js:1844:18)
at CollectionReference.where (/srv/node_modules/@google-cloud/firestore/build/src/reference.js:956:9)
at exports.newSubscriberNotification.functions.firestore.document.onUpdate (/srv/lib/index.js:19:49)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:131:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
11:04:22.957 PM
newSubscriberNotification
Function execution took 21 ms, finished with status: 'error'
Я почти уверен, что ему не нравится мое предложение .where из-за этой ошибки: в CollectionReference.where (/ srv / node_modules / @ google-cloud / firestore/build/src/reference.js:956:9)
Я просто не уверен, почему