Получать уведомления при появлении нового сообщения Firebase Android - PullRequest
0 голосов
/ 01 июля 2019

Я делаю приложение для чата.Я использую этот код для обнаружения новых сообщений (в базе данных Firebase) и затем уведомляю пользователей:

package com.tungvuong.dangeralarm;

import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;

import com.firebase.client.Firebase;
import com.google.firebase.FirebaseError;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import static com.facebook.login.widget.ProfilePictureView.TAG;

public class receive extends IntentService {
    public receive() {
        super("receive");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String tinmoi = dataSnapshot.child("messageText").getValue(String.class);
                Intent intent = new Intent(receive.this, chat.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                PendingIntent pendingIntent = PendingIntent.getActivity(receive.this, 0, intent, 0);
                NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(receive.this, "M_CH_ID");

                notificationBuilder.setAutoCancel(true)
                        .setDefaults(Notification.DEFAULT_ALL)
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.drawable.emergency_icon)
                        .setContentTitle("Có tin mới!")
                        .setContentText(tinmoi)
                        .setContentIntent(pendingIntent)
                        .setAutoCancel(true);
                NotificationManager notificationManager = (NotificationManager) receive.this.getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(1, notificationBuilder.build());
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d(TAG, databaseError.getMessage()); //Log errors
            }
        };

        rootRef.addValueEventListener(valueEventListener);

    }
}

Но когда я проверяю его, загружая базу данных из консоли Firebase, то добавляю новую запись в файл json, используяNotepad ++, а затем, наконец, я загрузил его на консоль (у меня нет 2 телефонов, чтобы проверить это, поэтому я должен изменить файл json), приложение не уведомляло пользователей или что-либо.

Вот моиБаза данных Firebase:

Моя база данных Firebase

enter image description here

Как вы видите, MessageText - это то, что слушательслушает.Это приложение представляет собой приложение для группового чата, и оно позволяет пользователям входить только анонимно.

1 Ответ

0 голосов
/ 01 июля 2019
FirebaseDatabase.getInstance().getReference()
                .child("danger-alram")
                .orderByChild("messageTime")
                .startAt(timeStampInMill) // last message time stamp goes here for first time it is zero
                .addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                        // You will get newly added child (messages) here...

                    }

                    @Override
                    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                    }

                    @Override
                    public void onChildRemoved(DataSnapshot dataSnapshot) {

                    }

                    @Override
                    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

Пока вы загружаете сообщение в firebase, вы получите onComplete() method

FirebaseDatabase.getInstance().getReference()
            .child("danger-alram")
            .push().setValue(newMessage, new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
            // send push notification to other group member using their firebase device id.
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...