【发布时间】: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@.
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字段。 -
你有什么消息吗?你成功了吗?我们也有类似的问题。
标签: android google-cloud-messaging