我试图在javascript中为Google firestore编写云端功能。它需要循环注册令牌并删除不必要的那些我认为我有大部分代码,但由于某种原因,它不喜欢我在一个数组上调用splice,我不是一个javascript开发人员,这让我感到困惑,我会在这里发布整个剧本,因为它不是很大,任何帮助都很受欢迎
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.notifyNewMessage = functions.firestore.document
('users/{ID}/contacts/{contactID}/messages/{messageID}')
.onCreate((docSnapshot , context) => {
const message = docSnapshot.data()
const recipientId = message['recipientId']
const senderId = message['sender']
const senderName = message['senderName']
return admin.firestore().doc('users/' + recipientId +
"/token/token").get().then(userDoc =>{
const registrationTokens = userDoc.get('token')
const notificationBody = (message['data_type'] === "TEXT") ? message['message'] : "You received a new mage message."
const payload = {
notification : {
title : senderName + "sent you a message.",
body : notificationBody,
clickAction : "MessageListActivity"
},
data : {
USER_NAME : senderName,
USER_NUMBER : message['sender']
}
}
return admin.messaging().sendToDevice(registrationTokens,payload).then(response => {
const stillRegisteredTokens = registrationTokens
response.results.forEach((result , index) => {
const error = result.error
if(error){
const failedRegistrationToken = registrationTokens[index]
console.error('failed token ', failedRegistrationToken, error)
if(error.code === 'messaging/invalid-registration-token'
|| error.code === 'messaging/registration-token-not-registered')
{ const failedIndex = stillRegisteredTokens.indexOf(failedRegistrationToken)
if(failedIndex > -1){
stillRegisteredTokens.splice(failedIndex, 1)
}
}
}
})
return admin.firestore().doc("users" + recipientId + "token" + "token").update({
registrationTokens : stillRegisteredTokens
})
})
})
})