1

Im trying to implement my mobile app with local notifications. To achieve that i have a function that listens to changes made in firestore if a notification is added the notification fires to the user. Here is the code i have :

 const deviceId = Constants.deviceId;

    Firebase.firestore().collection('notifications').where('user_reads', '!=', [deviceId]).onSnapshot(snapshot => {
    const {stat} = this.context;

      snapshot.docChanges().forEach(change => {
        const doc = change.doc.data();

        if (change.type === 'added') {
          console.log(change.doc.data(), 'added');

          //handle notification recived
          Notifications.addNotificationResponseReceivedListener(async response => {
            console.log(response.notification.request.identifier);

            //update read status in notification table and save uid of user who read notification
            Firebase.firestore().collection('notifications').doc(change.doc.id).update({
              user_reads: firebase.firestore.FieldValue.arrayUnion(deviceId),
              read: true,
            });

            //send user to the new post
            RootNavigation.navigate(t('SinglePost'), { id:  response.notification.request.content.data.data });
          });
        } else if (change.type === 'modified') {
          console.log(change.doc.data(), 'modified');
        }

        sendPushNotification(doc.title, doc.body, doc.postId);
      })
    });

How can i make the firestore to stop listening to changes. I save deviceId in an array in firestore. How can i condition this array to check if the the specific deviceId exists to stop listening to changes. Here is the screen-shot enter image description here

kxh
  • 59
  • 14
  • Can you share a screenshot of your Firestore document? So `user_reads` is an array and you are trying to fetch documents where that array does not contain current device's `deviceId` ? – Dharmaraj Apr 14 '22 at 13:58
  • 1
    If you want to check whether an array contains a certain value, you can use the `arrayContains` operation. But there is no equivalent `arrayDoesNotContain` operation. – Frank van Puffelen Apr 14 '22 at 13:58
  • @Dharmaraj i provided the screenshot. – kxh Apr 14 '22 at 14:20
  • @FrankvanPuffelen so there is no way to do this with this aproach ? – kxh Apr 14 '22 at 14:20

0 Answers0