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

我们的项目已经列入白名单,用于测试新的GCM 用户通知 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发送消息可以解决问题(并传递消息),但使用User Notifications API的重点是使用notification_key而不是registration_ids

从文档 :

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

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

以上示例使用https://android.googleapis.com的HTTP连接服务器。

到目前为止我尝试过:

  • 包括一个用于registration_ids的空数组,没有帮助
  • registration_ids字段中发送notification_key值作为注册ID也不起作用
  • project_id标题设置为我们的项目编号(在创建notification_key时需要),仍然没有运气
  • 使用CCS(XMPP)代替HTTP与GCM API服务器通信,但遗憾的是IP在Google App Engine上被阻止
  • 在请求中包括notification_keynotification_key_name都没有帮助

更新:根据此处的建议,我还尝试将有效负载发布到/gcm/notification ,并在JSON请求有效负载中包含"operation": "send"属性。 仍然没有帮助。 现在我得到:

 {"error":"Missing \"registration_ids\" field"} 

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

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

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

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

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

看看这个 ..

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

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

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