收到无效的 JSON 负载。 “message.notification”处的未知名称“标签”:找不到字段

问题描述 投票:0回答:1

最小可重现代码:

exports.testNotification = functions.https.onCall(async (data, context) => {
  if (data != null) {
    const message = {
      token: '<fcm_token>',
      notification: {
        title: 'Dummy title',
        body: 'Dummy body',
        tag: 'foo', // This throws runtime error. 
      },
    };

    try {
      const response = await admin
        .messaging()
        .send(message);
    } catch (error) {
      console.log('Error sending message = ', error);
    }
  }

  return null;
});

我从 Flutter 中调用此:

var callable = FirebaseFunctions.instance.httpsCallable('testNotification');
callable.call({});

收到无效的 JSON 负载。 “message.notification”处的未知名称“标签”:找不到字段。

错误信息:{ 代码:'消息传递/无效参数', 留言:

Invalid JSON payload received. Unknown name "tag" at 'message.notification': Cannot find field.
}, 代码前缀:'消息'

如果我注释掉

tag
字段,那么我确实会收到通知。那么,代码出了什么问题,那么如何使用
tag
呢?

typescript flutter firebase-cloud-messaging google-cloud-messaging
1个回答
2
投票

发送消息时,json由通用的“通知”部分组成。这里不支持“tag”属性。请参阅this以供参考。

“tag”属性与Android相关,因此应包含在Android部分的“notification”属性中。请参阅this以供参考。

这是如何生成包含平台特定信息的通知的示例。在 Android 配置中我添加了“标签”:

{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification":{
         "click_action":"OPEN_ACTIVITY_1",
         "tag":"foo"
       }
     },
     "apns":{
       "headers":{
         "apns-priority":"5",
       },
       "payload":{
         "aps":{
           "category":"NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

© www.soinside.com 2019 - 2024. All rights reserved.