新的GCM如何处理APNS反馈?

4
我在尝试使用新的GCM功能向iOS设备发送通知,一切都很顺利,除了反馈消息。我认为在GCM通过APNS发送消息后,GCM还会调用APNS的反馈服务来获取无效的令牌。下次我们再将相同的设备令牌用于GCM时,它应该会响应错误消息。我尝试了多次卸载应用程序,但从未收到来自GCM的错误消息。每次都显示成功消息。这里出了什么问题?
注意:如果您不熟悉新的GCM功能,请不要盲目回答此问题。

我不熟悉新的GCM功能,但我熟悉APNs。当您向iOS设备发送推送时,如果用户删除了应用程序,则不会收到任何回复。苹果提供了一个反馈服务来检查已删除的令牌,但他们建议每天查询反馈服务器,因此谷歌可能正在这样做。 - jcesarmobile
Android的GCM使用了不同的方式。通过包管理器,GCM可以识别应用程序是否存在。如果不存在,则将设备令牌映射到无效令牌,并在下一次请求时发送立即响应(而不是单独的反馈请求)。我原本期望iOS的GCM也能这样工作,但实际上并没有。 - Winster
但是,iOS的GCM在内部使用APNs,而APNs不会返回响应,因此您(在这种情况下是Google)必须时不时地检查反馈服务器以检查已删除的令牌。在GCM文档中,他们没有提到他们检查APNs的频率。 - jcesarmobile
正如您所说,尽管GCM没有明确提到APNS反馈轮询,developers.google.com/cloud-messaging/server-ref有一个部分指出“200 + error:NotRegistered - 例如,在iOS上,如果APNS反馈服务报告APNS令牌无效。” - Winster
你找到这个问题的解决方案了吗?我也无法使用GCM将消息传递到iOS。我不断收到“INVALID_REGISTRATION”错误,但是对于相同的设备令牌,我可以使用直接从苹果发送的APN发送通知。 - adang
2个回答

2

我认为问题出在环境上。我正在使用开发者证书来测试通知。APNS可能不会为开发环境提供任何详细信息。希望在生产环境中可以正常工作。

更新


来自Google的支持提供了以下细节。

我们进行了一些调查,似乎这是APNS处理事情的方式:

  • 当最后一个沙盒应用从设备中删除时,设备会断开与APNS沙盒的连接,无法再接收推送或提供反馈。因此,APNS反馈不会注册设备已被卸载。
  • 如果您在设备上安装了另一个启用推送的沙盒应用程序,则会强制设备重新连接到APNS。我们检查了在这种情况下,我们会收到通知设备已被卸载并向我们的客户端返回NotRegistered。

0

APNS反馈服务不是即时的。GCM会轮询APNS反馈服务,但根据我的经验它有点延迟(不确定是APNS的延迟还是GCM的延迟)。

您应该等待一段时间,然后尝试使用旧的注册令牌,您应该会看到一个“无效的注册令牌”错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接