Firebase Messaging: отправить сообщение на все устройства - PullRequest
0 голосов
/ 14 апреля 2020

Я пытался отправить сообщение на все устройства, используя topi c с именем «all», но, похоже, оно не работает (подробности ниже в The Problem ).

Получение сообщений

Я заставил каждое устройство подписаться на «все» топи c через мой класс FirebaseMessagingService, который запускается после аутентификации пользователя:

// Inside of MyFirebaseMessagingService extends FirebaseMessagingService

@Override
public void onCreate() {
    FirebaseMessaging.getInstance().subscribeToTopic("all");
}

@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    Log.d("FirebaseMessaging", "Got notification"); // This doesn't show up
    // Therefore the messages are not reaching the client
    ...
}

Отправка сообщений

Чтобы отправить сообщение, клиент помещает данные в базу данных реального времени на /messages/. Облачная функция запускается и (предположительно) отправляет сообщение «всем» клиентам.

// This part works well, as I can see the realtime database directly
final DatabaseReference ref = db.getReference().child("messages");
HashMap hashMap = new HashMap();
hashMap.put(alert.getGroup() + " " + auth.getCurrentUser().getUid() + " " + (new Date()).getTime(), alert);
ref.setValue(hashMap);

А вот облачная функция:

exports.sendMessage = functions.database.ref("/messages/{meta}")
    .onCreate((snapshot, context) => {
        const message = snapshot._data;
        console.log("msg", message["title"], message["description"], message["user"], message["group"]);
        if(message["event"] === "new message") {
            const payload = {
                data: message
                },
                topic: message["group"]
            }

            admin.database().ref("/messages/" + context.params.meta).remove()
            return admin.messaging().sendToTopic("all", payload)
        }
        return false
    });

Проблема

Вот список событий, которые я наблюдаю: 1. Клиенты отправляют сообщение 2. База данных в реальном времени обновляется (я вижу это непосредственно) 3. Облачная функция срабатывает (я вижу console.log) И ... здесь это останавливается. onMessageReceived никогда не срабатывает. Я понятия не имею, почему это будет. Любая помощь будет высоко ценится!

...