GCM 用户通知:缺少“registration_ids”字段
Posted
技术标签:
【中文标题】GCM 用户通知:缺少“registration_ids”字段【英文标题】:GCM User Notifications: Missing "registration_ids" field 【发布时间】:2013-11-01 04:24:33 【问题描述】:我们的项目已被列入白名单,用于测试新的 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 的全部意义在于使用notification_key
而不是@ 987654330@.
来自documentation:
registration_ids
: […] 请求必须包含收件人——这可以是注册 ID、注册 ID 数组或 notification_key。必填。
notification_key
: 将单个用户映射到与该用户关联的多个注册 ID 的字符串。这允许第 3 方服务器向单个用户拥有的多个应用程序实例(通常在多个设备上)发送单个消息。第 3 方服务器可以使用 notification_key 作为消息的目标,而不是单独的注册 ID(或注册 ID 数组)。 […] 可选。
以上示例使用位于https://android.googleapis.com
的HTTP 连接服务器。
到目前为止我尝试过:
为registration_ids
包含一个空数组,没有帮助
将notification_key
值作为registration_ids
字段中的注册ID 发送也不起作用
将project_id
标头设置为我们的项目编号(根据创建notification_key
时的要求),仍然没有运气
使用CCS(XMPP)代替HTTP与GCM API服务器通信,可惜the IP is blocked on Google App Engine
在请求中同时包含 notification_key
和 notification_key_name
,没有帮助
更新:根据建议的here,我还尝试将有效负载发布到/gcm/notification
,并在JSON 请求有效负载中包含"operation": "send"
属性。仍然没有帮助。现在我明白了:
"error":"Missing \"registration_ids\" field"
同样的事情,只是这次是用 JSON 编码发回的。
【问题讨论】:
registration_ids
是您在设备注册到 GCM 后得到的东西。您必须先将此 id 存储到您的数据库中,然后使用它来发送通知
@SunilMishra 我可以使用registration_ids
生成notification_key
,然后我应该能够使用notification_key
而不是 registration_ids
。
您是否尝试在请求中同时包含notification_key
和notification_key_name
?
@Eran 我现在已经尝试过了(包括密钥和密钥名称),我得到了和以前一样的错误,缺少 registration_ids
字段。
你有什么消息吗?你成功了吗?我们也有类似的问题。
【参考方案1】:
文档有问题,你必须使用这个请求:
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
【讨论】:
你完全正确。我从“notification_key”更改为“to”并且它有效。文档真的有问题! 我如何再给@Jacek Marchwicki 投票几次?!我还要注意,我必须在标题中使用我的“项目编号”而不是“项目 ID” GCM 文档竟然有这么错误,这太荒谬了!谢谢! 项目编号@xbakesx 是什么意思?我只看到项目 ID 和项目名称(虽然 ID 是一个数字) 我仍然收到 500 内部服务器错误。【参考方案2】: Have you got project_id for your project.
If yes then have you included same at proper place.
签出this ..
【讨论】:
上游消息需要项目 ID。对于下游(服务器 -> GCM -> Android),GCM 接受一个 API 密钥(作为“授权”标头的一部分),然后用于验证服务器并将其连接到相应的项目。 project_id 是 GCM 需要的,以了解需要注意哪个应用程序...一旦 GCM 找到所需的项目,它就会通过获取用户的 device_id 来发出通知。 不,GCM 可以仅根据 API 密钥识别请求,用户通知 API 不应要求device_id
。请仔细阅读我的问题。此外,我尝试包括项目 ID,以防万一。它没有帮助。【参考方案3】:
我也遇到了这个问题“HTTP/1.1 401 Unauthorized”。 而且,我通过用浏览器密钥替换 API 密钥解决了这个问题。
如果您的应用程序在客户端上运行,请使用浏览器密钥。
请参考以下链接: https://developers.google.com/console/help/new/#generatingdevkeys
【讨论】:
以上是关于GCM 用户通知:缺少“registration_ids”字段的主要内容,如果未能解决你的问题,请参考以下文章