У меня есть университетский проект, в котором я разрабатываю приложение, которое должно получать push-уведомление при создании нового документа в коллекции 'ocorrencia' из firebase.
Я пытался выполнить эту облачную функцию Firebase, но без удачи она не работает, и я не знаю, как мне прочитать токен свойства (мое приложение отправляет фактический токен устройства) от каждого пользователя в коллекции 'admin' и добавьте его в массив для отправки на все устройства с этим значением.
Я также пытался использовать этот учебник, но он тоже не работал:
https://angularfirebase.com/lessons/ionic-native-with-firebase-fcm-push-notifications-ios-android/
Вот моя функция index.js:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.notificacao = functions.firestore
.document('ocorrencia/{ocorrenciaId}')
.onCreate((snap,context) => {
const data = snap.data();
const idAdmin = data.idAdmin
const payload = {
notification: {
title:'Nova Ocorrência',
body:'Uma nova Ocorrência foi registrada'
}
}
var pushToken = "";
return functions
.firestore
.collection("admin/idAdmin")
.get()
.then((doc) => {
pushToken = doc.data().token;
return admin.messaging().sendTodevice(pushToken, payload)
});
})
А вот функция моего приложения, которая отправляет токен на сервер (он срабатывает после входа пользователя в систему):
async getDeviceToken(){
let token;
token = await this.fcm.getToken();
console.log(this.adminUid);
return this.sendFirestoreToken(token);
}
getAdminUid(){
this.afAuth.authState.subscribe(auth => {
this.adminUid = auth.uid;
})
}
sendFirestoreToken(token){
const adminRef = this.afs.collection('admin')
return adminRef.doc(this.adminUid).update({idAdmin: this.adminUid, token: token});
}
Также здесь есть мое репо на github:
https://github.com/gianveloxbr/MacacoIrmaoADM/tree/master/macacoIrmao
Функция должна запускаться каждый раз, когда новый реестр добавляется в 'ocorrencia', и ее нужно отправлять каждому пользователю в коллекции 'admin' с маркером свойства.
EDIT:
Я пробовал этот код, но не знаю, как мне восстановить все документы по их идентификатору
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.notificacao = functions.firestore
.document('ocorrencia/{ocorrenciaId}')
.onCreate((snap,context) => {
const data = snap.data();
const idAdmin = data.context.idAdmin
const db = admin.firestore()
// send a notification to each device token
return Promise.all([admin.database().ref('admin/${}/token').once('value')]).then(
// Don't know how to get every document using ${}
results => {
const token = results[1];
if(!token.hasChildren()) return null;
let payload = {
notification: {
title:'Nova Ocorrência',
body:'Uma nova Ocorrência foi registrada'
}
}
const tokens = Object.keys(token.val());
return admin.messaging().sendToDevice(tokens,payload);
}
)
})