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