使用Firestore Cloud功能向多个用户发送推送通知

时间:2020-06-14 06:23:23

标签: firebase google-cloud-firestore push-notification google-cloud-functions

我想使用云功能来检测Firestore数据库集合中的自动更改并向用户发送通知。

应用程序可以选择在用户A添加问题时所有其他用户都收到类似“用户A添加问题到地方”的通知来添加问题。 附上我的Firestore数据库的图片以了解。

enter image description here

当用户发布问题时,我们可以从上面显示的文档中获取作者uid“ add byBy”。

通过uid,我们可以从下面显示的用户集合中获取FCM令牌和名称等。

enter image description here

我已经设置了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;
     });
    });

0 个答案:

没有答案