GCM:Retry-After标头

时间:2013-04-17 15:30:50

标签: android push-notification google-cloud-messaging

根据GCM documentation,我们可以得到这种类型的结果消息:

{ "multicast_id": 216,
  "success": 3,
  "failure": 3,
  "canonical_ids": 1,
  "results": [
    { "message_id": "1:0408" },
    { "error": "Unavailable" },
    { "error": "InvalidRegistration" },
    { "message_id": "1:1516" },
    { "message_id": "1:2342", "registration_id": "32" },
    { "error": "NotRegistered"}
  ]
}

第二条消息的错误类型为Unavailable,应重新发送。根据文档,我们应该尊重Retry-After标题,如果它包含在GCM服务器的响应中。

我有两个问题:

  1. Retry-After标题始终可用吗?还有状态为200的回复?
  2. 实际上可能只有一条消息应该重新发送,就像在这种情况下一样?我应该只重新发送此消息还是重发?

1 个答案:

答案 0 :(得分:2)

1)

很难说。一方面,他们说当你在500-599范围内出现错误时应该预期Retry-After

  

5xx

     

500-599范围内的错误(例如500或503)表明存在错误   尝试处理时,GCM服务器中出现内部错误   请求,或服务器暂时不可用(例如,   因为超时)。发件人必须稍后重试,尊重任何人   Retry-After标头包含在响应中。应用服务器必须   实现指数后退。

我检查了纯文本请求和JSON请求的响应标头,我没有得到Retry-After 200响应。但是,我不知道如何模拟Unavailable错误,因此如果响应中出现此错误,它们可能会发送该标头。

2)

如果只有一条消息出现“Unavailable”错误(如示例响应中所示),则只应重新发送该消息。其余消息要么成功要么失败,错误不需要重试。因此,不应该反感他们。