根据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服务器的响应中。
我有两个问题:
Retry-After
标题始终可用吗?还有状态为200
的回复?答案 0 :(得分:2)
1)
很难说。一方面,他们说当你在500-599范围内出现错误时应该预期Retry-After
:
5xx
500-599范围内的错误(例如500或503)表明存在错误 尝试处理时,GCM服务器中出现内部错误 请求,或服务器暂时不可用(例如, 因为超时)。发件人必须稍后重试,尊重任何人 Retry-After标头包含在响应中。应用服务器必须 实现指数后退。
我检查了纯文本请求和JSON请求的响应标头,我没有得到Retry-After
200
响应。但是,我不知道如何模拟Unavailable
错误,因此如果响应中出现此错误,它们可能会发送该标头。
2)
如果只有一条消息出现“Unavailable”错误(如示例响应中所示),则只应重新发送该消息。其余消息要么成功要么失败,错误不需要重试。因此,不应该反感他们。