Android Firebase消息:使用云功能向所有应用程序用户发送数据消息
如何向应用程序的所有用户发送消息Android Firebase消息:使用云功能向所有应用程序用户发送数据消息,android,firebase,push-notification,google-cloud-functions,firebase-cloud-messaging,Android,Firebase,Push Notification,Google Cloud Functions,Firebase Cloud Messaging,如何向应用程序的所有用户发送消息 有了web GUI,就可以向应用程序的所有用户发送通知消息,因此我假设也可以通过函数和数据消息(或至少通过通知消息)发送通知消息,但我找不到这样做的方法 我的尝试 我尝试通过调用以下命令将所有设备订阅到一个主题: FirebaseMessaging.getInstance().subscribeToTopic("all"); 在myFirebaseMessagingService的onCreate事件中,然后使用云功能发送消息: exports.sendMes
有了web GUI,就可以向应用程序的所有用户发送通知消息,因此我假设也可以通过函数和数据消息(或至少通过通知消息)发送通知消息,但我找不到这样做的方法 我的尝试 我尝试通过调用以下命令将所有设备订阅到一个主题:
FirebaseMessaging.getInstance().subscribeToTopic("all");
在myFirebaseMessagingService
的onCreate
事件中,然后使用云功能发送消息:
exports.sendMessage = functions.database.ref("/messages/{meta}")
.onCreate((snapshot, context) => {
const message = snapshot._data;
console.log("msg", message["title"]);
// logs the correct data, therefore the event triggers
const payload = {
data: {
title: message["title"]
/* blah blah */
},
topic: "all"
}
admin.database().ref("/messages/" + context.params.meta).remove()
return admin.messaging().send(payload)
})
但是onMessageReceived
不会触发(与我使用GUI发送通知消息时不同)这种方法是否可行?我错过了什么?我相信你唯一需要改变的是结局。这里不需要这个部分
admin.database().ref(“/messages/”+context.params.meta).remove()
对于消息传递,您的代码需要类似于以下示例:
// Send a message to devices subscribed to the provided topic.
admin.messaging().send(payload)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
您需要使用一个catch来管理错误-这样您也可以可视化可能导致问题的原因。您可以在此文档中找到更多信息:
除此之外,我还发现了这个很好的存储库——您可以访问它——提供了一些示例和更多关于如何将云函数与FCM结合使用的代码示例
如果这些信息对你有帮助,请告诉我 我相信你唯一需要改变的是结局。这里不需要这个部分
admin.database().ref(“/messages/”+context.params.meta).remove()
对于消息传递,您的代码需要类似于以下示例:
// Send a message to devices subscribed to the provided topic.
admin.messaging().send(payload)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
您需要使用一个catch来管理错误-这样您也可以可视化可能导致问题的原因。您可以在此文档中找到更多信息:
除此之外,我还发现了这个很好的存储库——您可以访问它——提供了一些示例和更多关于如何将云函数与FCM结合使用的代码示例
如果这些信息对你有帮助,请告诉我 非常感谢!只有一件事:你提到的这行是为了在发送消息后从数据库中删除消息。我知道我不需要它来发送消息,但是有问题吗?嗨@OmerLubin谢谢你澄清这句话!如果你只是用它从数据库中删除,它应该不会影响你,但我会尝试删除这一行,并改变你发送消息的方式,只是为了测试。万一有人查到这一点,这个错误恰好与Firebase消息无关,与我推荐的代码相关——问题中的代码工作得非常完美。正如这个答案所示,正确的日志记录让我找到了它。非常感谢!只有一件事:你提到的这行是为了在发送消息后从数据库中删除消息。我知道我不需要它来发送消息,但是有问题吗?嗨@OmerLubin谢谢你澄清这句话!如果你只是用它从数据库中删除,它应该不会影响你,但我会尝试删除这一行,并改变你发送消息的方式,只是为了测试。万一有人查到这一点,这个错误恰好与Firebase消息无关,与我推荐的代码相关——问题中的代码工作得非常完美。正如这个答案所示,正确的日志记录是我找到它的原因。