Я пытался отправить сообщение на все устройства, используя 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
никогда не срабатывает. Я понятия не имею, почему это будет. Любая помощь будет высоко ценится!