【发布时间】:2018-01-06 07:27:22
【问题描述】:
我们正在开发一个聊天应用程序,并使用云功能通过 FCM 注册令牌向设备发送数据通知。下面是代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.createMessage = functions.firestore
.document('messages/{messageId}')
.onCreate(event => {
const db = admin.firestore();
var newValue = event.data.data();
var recipient = newValue.recipient_id;
var msg = newValue.message;
var sender = newValue.sender_id;
var senderRef = db.collection('users').doc(sender);
var recipientRef = db.collection('users').doc(recipient);
const senderObj = new Promise(
function(resolve, reject) {
senderRef.get()
.then(doc => {
if (!doc.exists) {
console.log('No such User document!');
reject(new Error('No such document!'));
} else {
console.log('Document data:', doc.data());
resolve(doc.data());
}
})
.catch(err => {
console.log('Error getting document', err);
reject(err);
});
});
const recipientObj = new Promise(
function(resolve, reject) {
recipientRef.get()
.then(doc => {
if (!doc.exists) {
console.log('No such User document!');
reject(new Error('No such document!'));
} else {
console.log('Document data:', doc.data());
resolve(doc.data());
}
})
.catch(err => {
console.log('Error getting document', err);
reject(err);
});
});
return Promise.all([senderObj, recipientObj]).then(results => {
var senderDetails = results[0];
var recipientDetails = results[1];
var payload = {
"data": {
"title": String(senderDetails.first_name),
"body": String(msg),
"recipientId": String(recipient),
"senderId": String(sender),
"senderImage": String(senderDetails.avatar),
"createdTime": String(newValue.created_time),
"chatType": "one",
"messageId": String(event.params.messageId)
}
};
var options = {
priority: "high"
};
/*
if (recipientDetails.device_type != "android"){
payload["content_available"] = true;
payload["priority"] = "high";
}
*/
admin.messaging().sendToDevice(recipientDetails.device_token, payload, options)
.then(function(response) {
console.log("Message sent: ", response);
})
.catch(function(error) {
console.log("Error sending message: ", error, payload);
});
});
});
这正在开发中,直到上周都可以正常向设备发送通知。它首先开始将消息延迟 5-10 分钟,现在我们根本没有收到任何通知。云函数的日志显示消息已成功传递:(
最近 Firestore/Cloud Functions 是否发生了变化,或者代码有什么问题?任何指针将不胜感激。
【问题讨论】:
标签: node.js firebase google-cloud-messaging google-cloud-functions google-cloud-firestore