android - GCM : Retry-After header

标签 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 header 包含在 GCM 服务器的响应中,我们应该尊重它。

我有两个问题:

  1. Retry-After header 始终可用吗?也在状态 200 的响应中?
  2. 实际上是否有可能像本例一样只重新发送一条消息?我应该只重新发送此消息还是全部消息?

最佳答案

1)

很难说。一方面,他们说当您收到 500-599 范围内的错误时,应该预期会发生 Retry-After :

5xx

Errors in the 500-599 range (such as 500 or 503) indicate that there was an internal error in the GCM server while trying to process the request, or that the server is temporarily unavailable (for example, because of timeouts). Sender must retry later, honoring any Retry-After header included in the response. Application servers must implement exponential back-off.

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

2)

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

关于android - GCM : Retry-After header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064185/

相关文章:

android - 如何从 dd-MM-yyyy HH :mm:ss to only dd-MM-yyyy HH:mm? 更改 android 中的日期格式

android - cursor.setNotificationUri() 和 getContentResolver().notifyChange(uri,null) 之间的区别

Android 语言环境更改

Android Room 数据库文件为空 - .db、.db-shm、.db-wal

android - GCM 返回空消息类型

ios - 当应用程序被杀死 iOS 10 时处理通知操作

ios7.1:推送通知角标(Badge)更新问题

php - Android 推送通知 (GCM) 的内容或数据限制

google-cloud-messaging - 我如何使用 GCM 3.0 为我的 android 应用程序保留不同的配置

android - 内部错误 : retry receiver class not set yet