12

我们的项目已被列入白名单,用于测试新的 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修复问题发送消息(并且消息被传递),但使用用户通知 API 的全部意义在于使用.notification_key而不是registration_ids.

文档中:

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

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

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

到目前为止,我尝试过:

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

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

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

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

4

3 回答 3

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了解更多详情

于 2014-08-07T13:30:24.307 回答
0

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

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

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

于 2013-12-03T11:13:12.883 回答
0
    Have you got project_id for your project. 
    If yes then have you included same at proper place.

看看这个..

于 2013-11-08T06:46:20.983 回答