我一直在尝试使用名为“ all”的主题向所有设备发送消息-但它似乎不起作用(以下问题中的详细信息)。
我让每个设备都通过我的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
永远不会触发。我不知道为什么会这样。
任何帮助将不胜感激!