如何在Firestore Android Studio中获取新添加的数据的通知?

问题描述 投票:0回答:2

我正在我的应用上执行通知,并且我正在使用Firestore。我的问题是,当snapshotlistener检测到数据库中新添加的数据时,我想向用户发送通知。但是,当我打开应用程序时,即使我没有添加新数据,它也会立即显示现有通知。我需要一些条件,在这些条件下,我只能获取新添加的数据,或者我的数据库数据中缺少某些东西才能克服此问题。下面是我的数据库结构。enter image description here

db.collection("Buyers")
                .document(userID)
                .collection("Notifications")
                .addSnapshotListener(new EventListener<QuerySnapshot>() {
                    @Override
                    public void onEvent(@Nullable QuerySnapshot snapshots, @Nullable FirebaseFirestoreException e) {
                        if (e != null) {
                            Log.e(LOG_DB, e.toString());
                            return;
                        }
                        for (DocumentChange dc : snapshots.getDocumentChanges()) {

                            if (dc.getType() == DocumentChange.Type.ADDED) {
                                String title = dc.getDocument().getData().get("notificationTitle").toString();
                                String body = dc.getDocument().getData().get("notificationBody").toString();

                                //Method to set Notifications
                                getNotification(title, body);
                            }
                        }
                    }
                });
java android notifications google-cloud-firestore snapshot
2个回答
0
投票

我能够得到想要的东西,但是我不确定这是否是正确的方法。

Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.MINUTE, -5);
    Date before = calendar.getTime();

    Calendar calendar1 = Calendar.getInstance();
    Date until = calendar1.getTime();

    for (DocumentChange dc : snapshots.getDocumentChanges()) {
        Date date = (Date) dc.getDocument().getData().get("notificationDate");
        if (dc.getType() == DocumentChange.Type.ADDED) {
            if (!before.after(date) && !until.before(date)){
                Log.d("life", "Data: "+date);
                String title = dc.getDocument().getData().get("notificationTitle").toString();
                String body = dc.getDocument().getData().get("notificationBody").toString();
                getNotification(title, body);
            }
        }
    }

我在这里所做的是我检索当前时间和当前时间减去5分钟。(您可以选择要延迟的分钟数)然后形成一个条件,该条件只能在5分钟内显示通知日期延迟。

注意:我知道这不是适当的做法,但这会得到我想要的结果。如果您不想要我的答案,请让我知道并发布您自己的答案,以便我确认您的答案。


0
投票

[如果您只想发送通知,则可以使用Firebase Cloud Messages,它可以提供您尝试实现的功能。https://firebase.google.com/docs/cloud-messaging

如果您要在Firestore中更改数据后发送通知,则可以使用FireStore触发器(https://firebase.google.com/docs/functions/firestore-events)并通过Firebase函数调用(Send push notifications using Cloud Functions for Firebase)发送通知”>

© www.soinside.com 2019 - 2024. All rights reserved.