#node.js #google-cloud-firestore #firebase-cloud-messaging #google-cloud-functions
#node.js #google-облако-firestore #firebase-cloud-messaging #google-cloud-функции
Вопрос:
Я создаю мобильное приложение с использованием flutter и хочу, чтобы оно поддерживало автоматические push-уведомления, затем я использовал firebase cloud messaging. Функция, которую я написал :
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
//admin.initializeApp();
var msgData;
exports.offerTrigger = functions.firestore.document('requests/{requestId}'
).onCreate((snapshot,context) => {
msgData = snapshot.data();
admin.firestore().Collection('pushtokens').get().then((snapshots) => {
var tokens = [];
if(snapshots.empty){
console.log('No devices');
}
else {
for(var token of snapshots.docs){
tokens.push(token.data().deviceId);
}
var payload = {
"notification" : {
"title" : "From" msgData.Name,
"body" : "Request " msgData.requestDetial,
"sound" : "default"
},
"data" : {
"SenderName" : msgData.Name,
"message" : msgData.requestDetial
}
}
admin.messaging().sendToDevice(tokens,payload).then((respone) => {
console.log("pushed them all");
}).catch((err) => {
console.log(err);
});
}
})
})
после развертывания моей функции и добавления некоторых документов я получил ошибку в журнале функций firebase
ошибка :
Ошибка типа: admin.firestore (…).Collection не является функцией
в exports.offerTrigger.functions.firestore.document.onCreate (/user_code /index.js: 9:23)
в cloudFunctionNewSignature (/user_code /node_modules/firebase-functions / lib / cloud-functions.js:114:23)
в cloudFunction (/user_code /node_modules/firebase-functions / lib / cloud-functions.js:144:20)
в /var/ tmp / worker /worker.js:827:24
в процессе._tickDomainCallback (internal / process/next_tick.js: 135:7)
Как я могу исправить эту ошибку?
Ответ №1:
Измените это:
admin.firestore().Collection('pushtokens').get().then((snapshots) => {
в это:
admin.firestore().collection('pushtokens').get().then((snapshots) => {
из документов:
Получает
CollectionReference
экземпляр, который ссылается на коллекцию по указанному пути.
Комментарии:
1. Это тот же брат admin.firestore ().Collection (‘pushtokens’).get().then ((снимки) => { в это: admin.firestore ().collection (‘pushtokens’).get().then ((снимки) => {
2. Оно должно быть в нижнем регистре, функция не вызывается
Collection()
с прописными буквами, измените его на нижний регистр и повторно разверните3. О боже, большое спасибо, братан, но теперь я получил новую ошибку, возвращающую неопределенное, ожидаемое обещание или значение, но я получил уведомление в своем приложении
4. Добавьте
return
сюдаreturn admin.messaging().sendToDevice(tokens,payload).then((respone)
. Пожалуйста, отметьте мой ответ (нажав на галочку «Сделать» рядом с ним) как правильный, поскольку он вам помог5. Спасибо тебе от всего сердца, брат, да благословит тебя Бог