我想使用云功能来检测Firestore数据库集合中的自动更改并向用户发送通知。
应用程序可以选择在用户A添加问题时所有其他用户都收到类似“用户A添加问题到地方”的通知来添加问题。 附上我的Firestore数据库的图片以了解。
当用户发布问题时,我们可以从上面显示的文档中获取作者uid“ add byBy”。
通过uid,我们可以从下面显示的用户集合中获取FCM令牌和名称等。
我已经设置了index.js文件,并通过更改数据库来测试单个用户通知,但是我需要知道应该针对该要求和基于Swift的应用使用哪种逻辑。
编辑:
到目前为止,我已经取得了进展,现在希望获得用户令牌列表,并希望将该列表与作者令牌进行比较,并排除作者令牌,并向其他用户发送推送通知。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const { UserDimensions } = require('firebase-functions/lib/providers/analytics');
const { firebaseConfig } = require('firebase-functions');
admin.initializeApp();
const firestore = admin.firestore();
var db = admin.firestore();
exports.sendQuestionPushNotification = functions.firestore
.document('placeQuestions/{userId}').onWrite((change, context) => {
let questionID = context.params.userId;
console.log('Question ID:', questionID);
let questionAuthorId = change.after.data().addeddBy;
console.log('Author ID:', questionAuthorId);
let placeID = change.after.data().addedToPlace;
console.log('Place ID:', placeID);
var userRef = firestore.collection('users').doc(questionAuthorId);
return userRef
.get()
.then(doc => {
if (!doc.exists) {
console.log('No such User document!');
throw new Error('No such User document!');
} else {
const authorName = doc.data().name;
const authorToken = doc.data().fcmToken;
console.log('Auhtor Name: ', authorName);
console.log('Author Token: ', authorToken);
return firestore.collection('mapPlaces').doc(placeID).get();
}
})
.then((result) => {
if (!result.exists) {
console.log('No such Place document!');
throw new Error('No such Place document!');
} else {
const placeName = result.data().name;
console.log('Place Name: ', placeName)
return firestore.collection('users').get();
}
})
.then((userList) => {
userList.forEach(user => {
console.log(user.id, '=>', user.data().fcmToken);
});
return true;
})
.catch(err => {
console.log('Error getting data', err);
return false;
});
});