Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GCM错误代码_Android_Push Notification_Google Cloud Messaging - Fatal编程技术网

Android GCM错误代码

Android GCM错误代码,android,push-notification,google-cloud-messaging,Android,Push Notification,Google Cloud Messaging,我有一个发送GCM推送通知的服务器应用程序。每发送1000个收件人,都会返回一条消息,告诉我每个注册ID的状态。有些会有错误代码。谷歌有没有一个文档告诉我应该如何处理这些代码,以及所有可能的错误代码是什么?我的Google foo没有显示任何内容。你看起来不够努力。所有代码都在解释错误响应下进行了解释 我试图复制并粘贴它,以便它不是一个仅链接的答案,但格式有点不正确: 解释错误响应 以下是处理不同类型错误的建议 尝试向设备发送消息时可能发生的情况: 缺少注册ID 检查请求是否包含注册ID(在纯文

我有一个发送GCM推送通知的服务器应用程序。每发送1000个收件人,都会返回一条消息,告诉我每个注册ID的状态。有些会有错误代码。谷歌有没有一个文档告诉我应该如何处理这些代码,以及所有可能的错误代码是什么?我的Google foo没有显示任何内容。

你看起来不够努力。所有代码都在解释错误响应下进行了解释

我试图复制并粘贴它,以便它不是一个仅链接的答案,但格式有点不正确:

解释错误响应

以下是处理不同类型错误的建议 尝试向设备发送消息时可能发生的情况:

缺少注册ID 检查请求是否包含注册ID(在纯文本消息中的registration_ID参数中,或在 注册(JSON中的ID字段)。 当错误代码丢失注册时发生

无效的注册ID 检查传递给服务器的注册ID的格式。确保它与手机接收到的注册ID匹配 com.google.android.c2dm.intent.REGISTRATION intent和 不截断它或添加其他字符。 当错误代码为无效注册时发生

不匹配的发件人 注册ID绑定到某一组发件人。当应用程序注册GCM使用时,它必须指定要使用的发件人 允许发送消息。确保您在使用时使用了其中一个 正在尝试向设备发送消息。如果你换一个不同的 发件人,现有注册ID将不起作用。发生错误时发生 代码不匹配SenderId

未注册的设备 在许多情况下,现有注册ID可能不再有效,包括:

  • 如果应用程序通过发出com.google.android.c2dm.intent.UNREGISTER intent手动注销
  • 如果应用程序自动取消注册,如果用户卸载该应用程序,则可能会发生(但不保证)
  • 如果注册ID过期。谷歌可能决定刷新注册ID
  • 如果应用程序已更新,但新版本没有配置为接收com.google.android.c2dm.intent.receive意图的广播接收器
对于所有这些情况,您应该从第三方服务器中删除此注册ID,并停止使用它发送消息。 当错误代码未注册时发生

消息太大 消息中包含的有效负载数据的总大小不能超过4096字节。请注意,这包括 键以及值。 错误代码为消息太大时发生

无效的数据键 有效负载数据包含一个键(例如from或任何由google前缀的值),该键由中的GCM在内部使用 com.google.android.c2dm.intent.RECEIVE intent,无法使用。注 GCM也会使用一些单词(如collapse_key),但是 在有效载荷中允许,在这种情况下,有效载荷值将为 由GCM值覆盖。 当错误代码为InvalidDataKey时发生

生存时间无效 生存时间字段的值必须是一个整数,表示0到2419200(4周)之间的持续时间(以秒为单位)。 当错误代码为InvalidTtl时发生

身份验证错误 无法验证您试图用于发送邮件的发件人帐户。可能的原因有:

  • 授权标头缺失或语法无效
  • 作为密钥发送的项目编号无效
  • 密钥有效,但已禁用GCM服务
  • 来自服务器密钥IP中未列出白名单的服务器的请求
检查您在授权标头中发送的令牌是否是与项目关联的正确API密钥。你可以 通过运行以下命令检查API密钥的有效性:

api\U密钥=您的api\U密钥

curl--header“Authorization:key=$api\u key”--header内容类型:“application/json”-d“{\“registration\u id\”:[\“ABC\”]}

如果收到401HTTP状态码,则API密钥无效。否则,您应该看到如下内容:

{“多播id”:6782339717028231855,“成功”:0,“失败”:1,“规范id”:0,“结果”:[{“错误”:“无效注册”}]}

如果要确认注册ID的有效性,可以用注册ID替换“ABC”。 HTTP状态代码为401时发生

超时 服务器无法及时处理该请求。您应该重试相同的请求,但必须遵守以下要求:

如果GCM服务器的响应中包含Retry After标头,请遵守该标头。 在重试机制中实现指数退避。这意味着在每次失败的重试后(例如。 如果在第一次重试前等待一秒钟,请至少等待两秒钟 下一个前一秒,然后是4秒,依此类推)。如果你是 发送多条消息时,通过一个 额外的随机金额,以避免对所有人发出新的请求 同时发送消息。 造成问题的发件人有被列入黑名单的风险。 当HTTP状态代码介于501和599之间,或者结果数组中JSON对象的错误字段为 不可用

I