Как получать уведомления о недавно добавленных данных в firestore android studio? - PullRequest
0 голосов
/ 09 октября 2019

Я делаю уведомление в своем приложении и использую 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);
                            }
                        }
                    }
                });

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Если вы просто хотите отправлять уведомления, вы можете использовать Облачные сообщения Firebase, которые могут предоставлять функции, которые вы пытаетесь реализовать самостоятельно. https://firebase.google.com/docs/cloud-messaging

Если вы хотите отправить уведомление после изменения данных в вашем Firestore, вы можете использовать триггеры FireStore (https://firebase.google.com/docs/functions/firestore-events) и отправить уведомление через вызов функции firebase ( Send push)уведомления с использованием облачных функций для Firebase )

0 голосов
/ 09 октября 2019

Я могу получить то, что хочу, но я не уверен, что это правильный способ сделать это.

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-минутной даты задержки.

Примечание: Я знаю, что это была неправильная практика, но это дает желаемый результат. Если вы не хотели, чтобы мой ответ, пожалуйста, дайте мне знать и опубликуйте ваш собственный ответ, чтобы я мог подтвердить ваш ответ.

...