Firestore的Firebase云功能未触发

时间:2018-05-07 01:51:02

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

无法让Firestore的Firebase云功能触发我的集合的onWrite。尝试为聊天应用设置设备到设备推送通知。功能已部署并按计划付费,但是,更改文档,更新或创建"聊天"集合没有触发。 Firebase云消息传递应该发送推送和写入日志。两者都没有发生。 Push正在与其他来源合作。

感谢您的帮助,希望设备到设备推送通知更容易,计划是观看聊天文档并在更新时触发推送通知或创建新会话。对其他想法开放。感谢



const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.sendNotification = functions.firestore
    .document('chats/{chatID}')
    .onWrite((data, context) => {
      // Get an object representing the document
       console.log('chat triggered');
      // perform desired operations ...

		// See documentation on defining a message payload.
		var message = {
		  notification: {
		    title: 'Hello World!',
		    body: 'Hello World!'
		  },
		  topic: context.params.chatID
		};

		// Send a message to devices subscribed to the provided topic.
		return admin.messaging().send(message)
		  .then((response) => {
		    // Response is a message ID string.
		    console.log('Successfully sent message:', response);
		    return true
		  })
		  .catch((error) => {
		    console.log('Error sending message:', error);
		  });

});




更新:我正在使用" firebase-functions":" ^ 1.0.1" 更新:更新了代码以反映我们当前部署的内容,但仍然无效。

3 个答案:

答案 0 :(得分:2)

您可能正在使用旧库(在V1.0之前)使用新库(v1.0)。请参阅迁移指南:https://firebase.google.com/docs/functions/beta-v1-diff并检查package.json文件中的版本。

此外,请注意,云函数必须始终返回Promise(或者如果不能,则至少为异步函数返回值)。请参阅此文档(及相关视频),详细说明:https://firebase.google.com/docs/functions/terminate-functions

您应该以这种方式修改代码:

如果您使用的是Cloud Functions 1.0或更高版本:

Logan 1
Star Wars: Rogue One 5
Monster Trucks 6
Power Rangers 5
The Fate of the Furious 6
Transformers 4
Thor 2
The Smurfs 1

返回:

exports.sendNotification = functions.firestore
    .document('chats/{chatID}')
    .onWrite((change, context) => {

答案 1 :(得分:1)

您的firebase-admin initialization syntaxadmin.initializeApp()表示您使用的是Cloud Functions SDK版本1.0.x.早期版本中onWrite() have changed in version 1.0.x的参数。您还需要return a Promise进行异步操作admin.messaging.send()。需要进行的三项修正如下:

exports.sendNotification = functions.firestore
    .document('chats/{chatID}')
    .onWrite((data, context) => {  // <= CHANGE
      // Get an object representing the document
       console.log('chat triggered');
      // perform desired operations ...

        // See documentation on defining a message payload.
        var message = {
          notification: {
            title: 'Hello World!',
            body: 'Hello World!'
          },
          topic: context.params.chatID // <= CHANGE
        };

        // Send a message to devices subscribed to the provided topic.
        return admin.messaging().send(message)  // <= CHANGE
          .then((response) => {
            // Response is a message ID string.
            console.log('Successfully sent message:', response);
            return
          })
          .catch((error) => {
            console.log('Error sending message:', error);
            return
          });

});

答案 2 :(得分:0)

对我来说,问题是我正在编写 Firestore 中已经存在的数据。如果您写入的数据与那里的数据完全相同,则不会明显触发 onWrite。