【发布时间】:2019-02-28 10:45:07
【问题描述】:
我正在尝试创建一个可以接收推送通知的应用。推送通知使用AWS SNS 和FCM 令牌而不是Expo's Token 发送。收到了通知,但是,系统托盘收到了两次通知。我尝试使用未安装 expo 的手机,但仍然收到 2 条通知。
这是我发送到SNS时的有效负载请求
{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}
知道为什么会这样吗?我愿意提供代码,但是我不知道应该放哪一部分。这是一个例子。应用名称相同,但第一个通知中包含 expo 的徽标。 更新:通过firebase控制台发送后,我意识到带有expo图标的通知是正确的。
编辑:尝试从 firebase 控制台发送通知后,我设法只收到 1 个通知。问题出在 SNS 上吗?
EDIT[2] 我查看了 SNS 平台应用程序的 Cloudwatch 日志。 NumberOfMessagesPublished 指标表明仅发布了 1 条消息。所以我想它消除了 SNS api 被调用两次的可能性。
EDIT[3] 我尝试使用go-fcm 包直接向fcm 发送通知。即使没有使用 SNS,我也收到了 2 条通知。但是为什么直接向 fcm 发送通知与使用 Firebase 控制台的输出不同呢?
更新
最后,我设法通过在notification 字段中设置tag 字段来防止重复,从而使其工作。
所以payload是这样的:
{
"GCM": "{ \"notification\": { \"text\": \"test message\", \"tag\": \"testing\" } }"
}
但是这仍然不能回答为什么我得到重复的问题:(
【问题讨论】:
-
可能来自 FCM 消息内容与消息一起发送两次,消息内容使用任何一个来处理/显示通知。我的情况是相同的,但在隐藏消息/消息内容后它已修复
-
你是怎么解决这个问题的?我目前正在使用
AWS SNS发送推送通知 -
以 fcm 为例分享您的通知处理程序
-
我的代码中目前没有任何通知处理程序,我只是从 expo 的
yield Notifications.getDevicePushTokenAsync()注册我的 FCM 令牌,然后在AWS SNS中注册它,然后从控制台发送消息 -
@RichardLeMesurier 我将用户ID 与
SNS Endpoint关联,而SNS Endpoint又与1 FCM Token关联。所以我认为每个用户不会重复。经过进一步测试,我尝试直接在firebase仪表板中使用FCM而不是SNS,并且在我使用firebase仪表板时通知没有重复。
标签: android amazon-web-services react-native firebase-cloud-messaging amazon-sns