【发布时间】:2019-08-10 11:22:32
【问题描述】:
我有一个问题,我需要帮助,因为我正在学习。
我有一个保存 Firebase/Firestore 数据的颤振应用,当用户请求友谊时,我将其添加到发件人和目标用户,更改 sendTo 和 sendBy 的 ID。
我的问题是 CloudFunctions 很好地检测到来自不同用户的 2 个集合已更改并通知我 2x(目标用户)。所以代码很好,但应该只通知一次/目标用户
我正在使用 FCM 发送本地通知。
exports.sendRequestNotification = functions.firestore
.document('users/{userId}/requests/{requestId}')
.onCreate((snap, context) => {
const docReq = snap.data()
/*console.log(docReq)*/
const sentBy = docReq.sentBy
const sentTo = docReq.sentTo
const contentRequest = docReq.code
if(contentRequest !== null){
// Get push token user to (receive)
admin
.firestore()
.collection('users')
.where('userId', '==', sentTo)
.get()
.then(querySnapshot => {
querySnapshot.forEach(userTo => {
/*console.log(`Found request user to: ${userTo.data().userId}`)*/
if (userTo.data().pushToken) {
// Get info user from (sent)
admin
.firestore()
.collection('users')
.where('userId', '==', sentBy)
.get()
.then(querySnapshot2 => {
querySnapshot2.forEach(userFrom => {
/*console.log(`Found request user from: ${userFrom.data().userId}`)*/
const payload = {
notification: {
title: `${userFrom.data().nickname}`,
body: contentRequest,
badge: '1',
sound: 'default'
}
}
// Let push to the target device
admin
.messaging()
.sendToDevice(userTo.data().pushToken, payload)
.then(response => {
/*console.log('Successfully sent request:', response)*/
})
.catch(error => {
console.log('Error sending request:', error)
})
})
})
} else {
console.log('User request or token not found')
}
})
})
return null
}
})
【问题讨论】:
标签: firebase google-cloud-firestore google-cloud-functions