GCM用户通知:缺少“registration_ids”字段

时间:2013-11-01 04:24:33

标签: android google-cloud-messaging

我们的项目已经列入白名单,用于测试新的GCM User Notifications API,该API允许将注册ID分组到一个“通知密钥”,然后可以将其用于向用户拥有的所有设备发送消息。

但是,当我发送这样的请求时:

POST /gcm/send
Authorization: key=…
Content-Type: application/json

{"notification_key": "…",
 "data": {…}
}

我收到错误回复:

400 Bad Request

Missing "registration_ids" field

使用registration_ids字段而不是notification_key发送邮件可以解决问题(并传递邮件),但使用用户通知API的重点是使用{{1而不是notification_key

来自documentation

  

registration_ids :   [...]请求必须包含收件人 - 这可以是注册ID,注册ID数组或notification_key。必需的。

     

registration_ids :   将单个用户映射到与该用户关联的多个注册ID的字符串。这允许第三方服务器将单个消息发送到单个用户拥有的多个应用程序实例(通常在多个设备上)。第三方服务器可以使用notification_key作为消息的目标,而不是单个注册ID(或注册ID数组)。 [...]可选。

以上示例使用notification_key处的HTTP连接服务器。

到目前为止,我试过了:

  • 包含https://android.googleapis.com的空数组,无效
  • registration_ids字段中将notification_key值作为注册ID发送,不起作用
  • registration_ids标题设置为我们的项目编号(在创建project_id时需要),仍然没有运气
  • 使用CCS(XMPP)代替HTTP与GCM API服务器通信,但不幸的是the IP is blocked on Google App Engine
  • 在请求中包含notification_keynotification_key,无效

更新:根据建议的here,我还尝试将有效负载发布到notification_key_name,并在JSON请求有效负载中包含/gcm/notification属性。仍然没有帮助。现在我明白了:

"operation": "send"

同样的事情,只有这次它被发送回JSON编码。

3 个答案:

答案 0 :(得分:10)

文档有问题,您必须使用此请求:

curl -vvv -X POST --header "Content-Type: application/json" --header "project_id: <YOUR-PROJECT-ID>" --header "Authorization: key=<YOUR-PROJECT-SECRET-KEY>" --data @- "https://android.googleapis.com/gcm/send" << EOF
{ 
   "to": "<NOTIFICATION-ID>",
   "data": {},
}
EOF

请参阅我的博文https://medium.com/appunite-edu-collection/d7df385b0ff4了解更多详情

答案 1 :(得分:0)

    Have you got project_id for your project. 
    If yes then have you included same at proper place.

检查this ..

答案 2 :(得分:0)

我也遇到过这个问题“HTTP / 1.1 401 Unauthorized”。 而且,我通过使用浏览器密钥替换API密钥解决了这个问题。

如果您的应用程序在客户端上运行,请使用浏览器密钥。

请参阅以下链接: https://developers.google.com/console/help/new/#generatingdevkeys