最小可重现代码:
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
呢?
发送消息时,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"
}
}
}
}