Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Firebase云功能不支持';t使用异步发送推送通知_Node.js_Firebase_Flutter_Asynchronous_Google Cloud Functions - Fatal编程技术网

Node.js Firebase云功能不支持';t使用异步发送推送通知

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

我的目标是在用户发送消息时发送推送通知。我试图通过从firestore数据库检索所有推送令牌来实现这一点,并在每次向实时数据库添加新消息时使用这些令牌发送多播消息

作品 第一个例子有效。没有令牌检索,令牌是硬编码的。我确实收到了通知

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,
}