0

我已经构建了 Android 应用程序(尚未上市),我正在努力找出 C2DM 失败的原因。我可以注册我的设备,并获得一个注册 ID。

我已经构建了一个服务器应用程序,该应用程序将请求提交到谷歌的 C2DM 服务器,我得到了一个 200 响应和一个消息 ID。(成功)。问题是,我的设备永远不会收到消息。

令我惊讶的一件事是,如果我尝试在几秒钟内注册设备两次,我会得到一个不同的注册 ID。他们很可能将时间用作种子。

这个注册id这么频繁变化正常吗?任何线索/建议(我已经阅读了指南)?

干杯...

注意:我没有 sim 卡,我只使用公司 WiFi 网络。我最后的希望是我的网络上的 5228 端口可能已关闭。

4

5 回答 5

2

谷歌表示,C2DM 将随时改变。因此,您必须使用设备的正确注册 ID 更新您的服务器。如果 id 服务器与 google 发送到您设备的服务器不匹配,它将无法发送推送。

因此,作为黄金法则,“始终在获得最新的 c2dm 注册 ID 后立即更新服务器”

如果 Google 回复 200,则正文应包含一个 id。如果有错误,正文就会有错误。错误代码如下。

  • QuotaExceeded — 发件人发送的消息过多。一段时间后重试。
  • DeviceQuotaExceeded — 发件人向特定设备发送的消息过多。一段时间后重试。
  • MissingRegistration — 缺少registration_id。发件人应始终将registration_id 添加到请求中。
  • InvalidRegistration — 错误的registration_id。发件人应删除此registration_id。
  • MismatchSenderId — registration_id 中包含的 sender_id 与用于向 C2DM 服务器注册的发件人 ID 不匹配。
  • NotRegistered — 用户已卸载应用程序或关闭通知。发件人应停止向该设备发送消息并删除registration_id。客户端需要重新注册到 c2dm 服务器才能再次接收通知。
  • MessageTooBig — 消息的负载太大,请参阅限制。减小消息的大小。
  • MissingCollapseKey — 需要折叠键。在请求中包含折叠键。

此信息来自http://code.google.com/android/c2dm/#testing

于 2011-12-22T10:55:55.897 回答
1

是的,正如 Rihan 所说,每次您注册您的设备时,您都会得到一个新的。registration ID如果您 registration ID知道您的 c2dm 已从谷歌服务器成功实施。现在您必须将此 ID 发送到您的服务器。通过使用此 ID,您已发送将通知推送到您的设备。

现在您将在 C2DReceiver 的 OnReceive() 方法中收到消息,并且您必须处理此消息(可以通知用户)

于 2011-12-22T11:43:13.073 回答
1

问题是我使用的网络上的端口 5228 已关闭。

于 2011-12-27T23:03:57.677 回答
0

我遇到了类似的问题,问题出在应用程序中,我没有发送用于注册 C2DM 消息的正确电子邮件地址。所以一直失败。

因此,请检查您在从设备注册 C2DM 时是否发送正确的电子邮件地址作为发件人的电子邮件地址,该设备是在谷歌注册的用于推送通知的电子邮件地址。

于 2011-12-22T10:37:28.990 回答
0

虽然日韩是对的。注册ID每次都会改变。我没有收到消息的原因是端口被锁定。

对于其他谷歌员工,请确保 5228 在你发疯之前是开放的......

于 2011-12-22T21:29:23.420 回答