我正在尝试通过AWS SNS向GCM发送移动推送通知。根据最新的GCM 3.0 documentation,可以包括"通知"有效载荷或数据"有效载荷(或两者)。如果您发送通知有效负载,则GCM将负责为您显示最终用户设备上的通知。
使用Amazon SNS控制台,我尝试发送仅通知的有效负载,但是我遇到了以下错误:
参数无效:消息原因:协议通知无效 GCM:数据密钥在json消息中是预期的(服务:AmazonSNS; 状态代码:400;错误代码:InvalidParameter)
我发送:
{
"GCM":"{\"notification\":{\"title\":\"Test Message\"}}"
}
我怀疑这可能是SNS仍然符合以前版本的GCM的一个问题,因此它需要一个"数据"关键,但我不确定。是否有其他人有类似的问题或有任何经验?谢谢!
编辑: 为了澄清,我想向GCM发送通知有效负载,并让它自动向用户显示警报,如文档中所述。现在,我开始怀疑SNS是否甚至将通知有效负载转发到设备。
答案 0 :(得分:12)
为了回答我自己的问题,我在他们的论坛上从AWS Support收到了以下内容:
你是对的,SNS目前不支持GCM的“通知” 有效负载类型,如其文档中所述。 SNS支持 最初的“数据”有效负载类型,但我们正积极致力于 支持“通知”类型的解决方案。在此期间, 除了客户端应用程序负责之外,“data”有效负载的工作方式相同 处理过去的数据消息。
因此,在SNS支持GCM通知有效负载之前,您必须通过扩展类GcmListenerService
并覆盖方法onMessageReceived
来自行处理通知的显示。
2015年10月更新: 似乎SNS现在已经实现了对GCM通知负载的支持。如果同时包含“数据”和“通知”有效负载,则“通知”将优先。我只是在SNS上观察到这种行为,但找不到任何宣布这一点的AWS博客/文章。