Iphone Apple推送通知服务器-反馈始终返回零元组

Iphone Apple推送通知服务器-反馈始终返回零元组,iphone,service,notifications,push,feedback,Iphone,Service,Notifications,Push,Feedback,我正在开发一个使用苹果推送通知的iPhone应用程序。在iPhone端,一切都很好,在服务器端,我有一个问题。通知发送正确。但是,当我试图查询反馈服务以获取卸载应用程序的设备列表时,我总是得到零结果。我知道我应该得到一个结果,因为应用程序已从我的一个测试设备上卸载。24个多小时后,我仍然没有收到反馈服务的结果 有什么想法吗?有人知道反馈服务识别我的应用程序已从测试设备卸载需要多长时间吗?这可能是由于沙盒环境造成的吗?我在沙盒环境中也遇到了同样的问题。反馈服务返回零元组 我切换到生产环境来测试代码

我正在开发一个使用苹果推送通知的iPhone应用程序。在iPhone端,一切都很好,在服务器端,我有一个问题。通知发送正确。但是,当我试图查询反馈服务以获取卸载应用程序的设备列表时,我总是得到零结果。我知道我应该得到一个结果,因为应用程序已从我的一个测试设备上卸载。24个多小时后,我仍然没有收到反馈服务的结果


有什么想法吗?有人知道反馈服务识别我的应用程序已从测试设备卸载需要多长时间吗?这可能是由于沙盒环境造成的吗?

我在沙盒环境中也遇到了同样的问题。反馈服务返回零元组


我切换到生产环境来测试代码,一切正常。一旦我从设备上卸载了应用程序并发送了一对推送通知,该设备就会出现在反馈列表中。

虽然我不能肯定它在沙盒环境中不起作用,但我非常确定。在生产环境中,卸载应用程序后,我发送了几个(我猜是3个)推送通知。然后,反馈服务返回的结果不是零元组。(大约十分钟后)


这与本例无关,但为了获得通知和反馈结果,您的网络应该允许APN使用的端口

我刚刚遇到了完全相同的问题:

int bytesReceived = 0;
byte[] feedbackPacket = new byte[38];   // Each feedback should always be 38 bytes long
bytesReceived = stream.Read(feedbackPacket, 0, feedbackPacket.Length);
while(bytesReceived > 0)
{
    ProcessFeedback(feedbackPacket);
    Array.Clear(feedbackPacket, 0, feedbackPacket.Length);
    bytesReceived = stream.Read(feedbackPacket, 0, feedbackPacket.Length);
}
在沙箱上,上面的始终返回0 bytesReceived。我在实时主机上运行了这个程序,向设备发送了一个通知,删除了应用程序,并发送了第二个通知。反馈服务在发送第二个请求后的一秒钟内工作


但有一件事我没有发现,那就是多久给反馈服务打一次电话。现在我每10分钟打一次电话

正如Zakum在评论中所说,如果删除最后一个支持推送的应用程序,该设备将不会被添加到列表中

(一定要给它足够的时间——也许10到20分钟。)

如果您从设备或计算机中删除应用程序,然后向其发送推送通知,则可能会拒绝设备令牌,并且无效的设备令牌应显示在反馈服务上但是,如果这是设备或计算机上最后一个启用推送功能的应用程序,它将不会显示在反馈服务中。这是因为删除最后一个应用程序会在发送删除通知之前中断与推送服务的持续连接

您可以通过在设备或计算机上保留至少一个已启用推送功能的应用来解决此问题,以保持持续连接。要保持与生产环境的持久连接,只需从app Store安装任何支持免费推送的应用程序,然后您就可以删除您的应用程序并在反馈服务中看到它


回想一下,每个推送环境都有自己的持久连接。因此要保持与沙盒环境的持久连接,请安装另一个支持推送的开发应用。

仅供记录:问题似乎是,一旦从设备中删除了所有支持推送通知的应用,与Apple反馈服务的连接就会关闭。因此,您必须安装两个支持推送的应用程序,然后才能删除测试中的应用程序。见: