如何使用admin SDK从云功能中使用FCM sendToTopic?

时间:2017-12-06 19:39:33

标签: firebase firebase-cloud-messaging google-cloud-functions

我需要将耗时的过程分解为多个云功能,因为总共需要9分钟(最长执行时间)。为此,我希望由pub / sub主题触发的一个(入口)云函数将消息写入其他主题,从而触发其他pub / sub云功能。

我正在通过firebase experimental:functions:shell测试这些内容。触发输入函数不是问题,但是当该函数调用admin.messaging().sendToTopic(...)时,我收到以下错误:

  

尝试向FCM服务器进行身份验证时发生错误。使   确保用于验证此SDK的凭据具有正确的凭据   权限。请参阅https://firebase.google.com/docs/admin/setup   设置说明。

我不确定这是因为我在本地测试它,但我找不到任何简单的方法来向主题发送消息。 firebase控制台有"通知"您可以轻松格式化和发送消息的部分,但这些似乎只针对客户端应用程序(ios / android / web)。

我无法在文档中找到有关为云功能中的FCM配置配置凭据的任何内容。我正在使用标准凭据。例如,我的函数写入我的Firestore实例没有问题。

docs for using FCM in the admin SDK似乎也未提及此事。

1 个答案:

答案 0 :(得分:1)

Firebase(Google)云消息传递和Google Cloud Pub / Sub是不同的消息传递系统,explained here

  

两者都是用于传递邮件的系统,但Google Cloud Messaging是   用于向最终用户设备发送消息,而Google则用于发送消息   Cloud Pub / Sub用于在服务器之间进行通信。谷歌云   消息传递旨在扩展到非常大量的交付端   点,但吞吐量低(每个通道每秒的消息数)。   Pub / Sub对吞吐量没有限制,并且具有更通用的API。

虽然他们分享主题的概念,但发送到FCM主题的消息不会触发Pub/Sub Cloud Function

您可以使用@google-cloud/pubsub从云功能发布发布/订阅消息。 documentation is here

下面的两个函数演示了发布和接收简单的字符串消息。

const pubsub = require('@google-cloud/pubsub')();

exports.testWrite = functions.database.ref('/test').onWrite(event => {
   var topic = pubsub.topic('test-topic');

  // Publish a message to the topic.
  var publisher = topic.publisher();
  var message = Buffer.from('Hello World!');

  return publisher.publish(message);
});

exports.helloPubSub = functions.pubsub.topic('test-topic').onPublish(event => {
  const buffer = Buffer.from(event.data.data, 'base64');
  console.log('message=', buffer.toString('utf8'));
  return null;
});