Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase消息:使用云功能向所有应用程序用户发送数据消息_Android_Firebase_Push Notification_Google Cloud Functions_Firebase Cloud Messaging - Fatal编程技术网

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");
在my
FirebaseMessagingService
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消息无关,与我推荐的代码相关——问题中的代码工作得非常完美。正如这个答案所示,正确的日志记录是我找到它的原因。