Node.js Firebase云功能不支持';t使用异步发送推送通知
我的目标是在用户发送消息时发送推送通知。我试图通过从firestore数据库检索所有推送令牌来实现这一点,并在每次向实时数据库添加新消息时使用这些令牌发送多播消息 作品 第一个例子有效。没有令牌检索,令牌是硬编码的。我确实收到了通知Node.js Firebase云功能不支持';t使用异步发送推送通知,node.js,firebase,flutter,asynchronous,google-cloud-functions,Node.js,Firebase,Flutter,Asynchronous,Google Cloud Functions,我的目标是在用户发送消息时发送推送通知。我试图通过从firestore数据库检索所有推送令牌来实现这一点,并在每次向实时数据库添加新消息时使用这些令牌发送多播消息 作品 第一个例子有效。没有令牌检索,令牌是硬编码的。我确实收到了通知 exports.notifyUsers=functions.database.ref('/messages/{messageId}').onCreate((liveSnapshot,context)=>{ const name=context.params.mess
exports.notifyUsers=functions.database.ref('/messages/{messageId}').onCreate((liveSnapshot,context)=>{
const name=context.params.messageId;
const message=liveSnapshot.val().toString();
常量标记=[
“e6erA_qM…”,
“ePU9p_CI…”,
];
常数有效载荷={
通知:{
标题:`newmessagefrom${name}`,
正文:信息,
徽章:“1”,
声音:“默认”
},
代币:代币,
}
const res=admin.messaging().sendMulticast(有效负载);
log(`response:${res}`);
不起作用
这不起作用,我没有收到任何通知
exports.notifyUsers=functions.database.ref('/messages/{messageId}').onCreate(异步(liveSnapshot,context)=>{
const name=context.params.messageId;
const message=liveSnapshot.val().toString();
const snapshot=wait admin.firestore().collection('users').get();
const tokens=snapshot.docs.map(doc=>doc.data().token);
常数有效载荷={
通知:{
标题:`newmessagefrom${name}`,
正文:信息,
徽章:“1”,
声音:“默认”
},
代币:代币,
}
const res=wait admin.messaging().sendMulticast(有效负载);
log(`response:${res}`);
我已经验证了从数据库检索到的令牌与具有以下代码的硬编码令牌相同
exports.notifyUsers=functions.database.ref('/messages/{messageId}').onCreate(异步(liveSnapshot,context)=>{
常量硬编码字符=[
“e6erA_qM…”,
“ePU9p_CI…”,
];
const snapshot=wait admin.firestore().collection('users').get();
const tokens=snapshot.docs.map(doc=>doc.data().token);
让同样的假设成立;
硬编码的tokens.forEach(el=>{
如果(!令牌包括(el)){
相同=错误;
}
});
控制台日志(相同);
})
这将在firebase云功能控制台中记录true
该函数使用节点12。以下代码有效 异步函数getTokens(){ const snapshot=wait admin.firestore().collection('users').get(); 返回snapshot.docs.map(doc=>doc.data().token); } exports.notifyUsers=functions.database.ref('/messages/{messageId}').onCreate(异步(快照,上下文)=>{ const name=context.params.messageId; const message=snapshot.val().toString(); const tokens=等待getTokens(); 常数有效载荷={ 通知:{ 标题:`newmessagefrom${name}`, 正文:信息, }, 代币:代币, }; 等待admin.messaging().sendMulticast(有效负载); })
我将我的回答记录如下:
const res=wait admin.messaging().sendMulticast(有效负载);
log('response:',JSON.stringify(res));
此日志记录了以下内容:response:{“responses”:[{“success”:false,“error”:{“code”:“messaging/invalid argument”,“message”:“接收到无效的JSON负载。在“message.notification”处的未知名称\“sound\”:找不到字段。},{“success”:false,“error”:{“code”:“messaging/invalid argument”,“message”:“接收到无效的JSON负载。未知名称\”sound\在“message.notification”:找不到字段“}}],“successCount”:0,“failureCount”:2}
基于此,我认为问题在于有效负载通知部分的
声音
参数。它在删除后工作。我最近遇到了类似的问题,并根据以下说明,通过断开Android和iOS特定字段解决了此问题:
const message = {
"notification": {
"title": `New message from ${name}`,
"body": message,
},
'apns': {
'payload': {
'aps': {
'badge': 1,
},
},
},
'android':{
'notification':{
'notificationCount': 1,
},
},
"tokens": tokens,
}