【问题标题】:Sending a notification-only payload to GCM using AWS SNS使用 AWS SNS 向 GCM 发送仅通知负载
【发布时间】:2015-10-31 05:28:04
【问题描述】:

我正在尝试通过 AWS SNS 向 GCM 发送移动推送通知。根据最新的GCM 3.0 documentation,一个可能包括“通知”有效负载或“数据”有效负载(或两者)。如果您发送通知负载,则 GCM 将负责在最终用户设备上为您显示通知。

使用 Amazon SNS 控制台,我尝试发送仅通知负载,但遇到以下错误:

无效参数:消息原因:协议通知无效 GCM:json 消息中需要数据键(服务:AmazonSNS; 状态码:400;错误代码:无效参数)

我正在发送:

{
  "GCM":"{\"notification\":{\"title\":\"Test Message\"}}"
}

我怀疑这可能是 SNS 仍然符合以前版本的 GCM 的问题,因此它需要一个“数据”密钥,但我不确定。有没有其他人有类似的问题或有这方面的经验?谢谢!

编辑: 为了澄清,我想向 GCM 发送一个通知有效负载,并让它自动向用户显示警报,如文档中所述。现在,我开始怀疑 SNS 是否会将通知负载转发到设备。

【问题讨论】:

  • 如果你添加了 data 属性并且只留下一个空字符串呢?
  • @cYrixmorten,说得好。这肯定会奏效,但我真正想要的是让 GCM 识别通知有效负载并按照记录自动显示警报。当我发送一个空数据字符串时,这不会发生。
  • 好吧,只是认为它可能已经足够“聪明”地识别出数据值是空的。我只有自己实现 GCM 安装处理的经验(很久以前而且很乏味),然后我一直在使用 parse.com。后者对我来说效果很好,而且很容易设置。

标签: android amazon-web-services google-cloud-messaging amazon-sns


【解决方案1】:

为了回答我自己的问题,我在 AWS Support 的论坛上收到了以下信息:

你是对的,SNS 目前不支持 GCM 的“通知” 有效载荷类型,如其文档中所述。 SNS 支持 仅初始“数据”有效负载类型,但我们正在积极研究 支持“通知”类型的解决方案。与此同时, “数据”有效负载的工作方式相同,除了客户端应用程序负责 像过去一样处理数据消息。

因此,在 SNS 支持 GCM 通知负载之前,您必须自己处理通知的显示,方法是扩展类 GcmListenerService 并覆盖方法 onMessageReceived

2015 年 10 月更新: 似乎 SNS 现在已经实现了对 GCM 通知负载的支持。如果您同时包含“数据”和“通知”有效负载,则“通知”将优先。我只在 SNS 上观察到这种行为,但找不到任何宣布此行为的 AWS 博客/文章。

【讨论】:

  • 感谢 weiy,发现这很有价值 - 查看我发送时收到的数据 { "GCM": "{ \"notification\": { \"title\": \"Title\" , \"body\": \"Body\" }, \"data\":{} }" },我在数据包中看到了键“gcm.notification.title”。我猜测 SNS 前缀带有“gcm”,因为历史上 SNS 用户可能会使用“通知”键来获取其他数据。对于不确定的未来,我认为您必须从 gcm.notification.X 中解压缩数据,我们将无法使用 gcm 3.0 规范。
  • 谢谢。在互联网上翻了几个小时后,我终于找到了这个,它解决了我的问题。只要使用data,我的通知标题总是GCM MESSAGEnotification 结构修复了它! SNS 文档似乎不是最新的以反映这一点。
猜你喜欢
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多