我正在我的应用上执行通知,并且我正在使用Firestore。我的问题是,当snapshotlistener
检测到数据库中新添加的数据时,我想向用户发送通知。但是,当我打开应用程序时,即使我没有添加新数据,它也会立即显示现有通知。我需要一些条件,在这些条件下,我只能获取新添加的数据,或者我的数据库数据中缺少某些东西才能克服此问题。下面是我的数据库结构。
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);
}
}
}
});
我能够得到想要的东西,但是我不确定这是否是正确的方法。
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分钟内显示通知日期延迟。
注意:我知道这不是适当的做法,但这会得到我想要的结果。如果您不想要我的答案,请让我知道并发布您自己的答案,以便我确认您的答案。
[如果您只想发送通知,则可以使用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)发送通知”>