我需要将耗时的过程分解为多个云功能,因为总共需要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似乎也未提及此事。
答案 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;
});