【问题标题】:Apple Push notifications server - Feedback always returns zero tuplesApple 推送通知服务器 - 反馈总是返回零元组
【发布时间】:2010-08-04 06:59:29
【问题描述】:
我正在开发一个使用 Apple 推送通知的 iPhone 应用程序。在 iPhone 端一切都很好,在服务器端我有问题。通知已正确发送,但是当我尝试查询反馈服务以获取已卸载应用程序的设备列表时,我总是得到零结果。我知道我应该获得一个结果,因为该应用程序已从我的一台测试设备上卸载。 24 小时或更长时间后,我仍然没有反馈服务的结果..
有什么想法吗?有人知道反馈服务需要多长时间才能识别出我的应用程序已从我的测试设备上卸载?会不会是沙盒环境的原因?
【问题讨论】:
标签:
iphone
service
notifications
push
feedback
【解决方案1】:
我也遇到了同样的问题:
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 分钟打一次电话。
【解决方案2】:
我在沙盒环境中遇到了同样的问题。反馈服务返回零元组。
我切换到生产环境来测试我的代码,一切正常。当我从设备上卸载应用并发送一对推送通知时,该设备出现在反馈列表中。
【解决方案3】:
虽然我不能肯定地说它在沙盒环境中不起作用,但我很确定。在生产环境中,卸载我的应用程序后,我发送了一些(我猜是 3 个)推送通知。然后反馈服务返回零元组以外的结果。 (大约十分钟)
与本案无关,但为了得到通知,也为了得到反馈结果,你的网络应该允许APNS使用的端口。
【解决方案4】:
正如 Zakum 在评论中所说,如果您删除最后一个启用推送的应用,该设备将不会被添加到列表中。
(并确保给它足够的时间 - 可能是 10 到 20 分钟。)
From Apple Documentation:
如果您从设备或计算机中删除您的应用程序,然后向其发送推送通知,您可能会拒绝设备令牌,并且无效的设备令牌应该出现在反馈服务中。 但是,如果这是设备或计算机上最后一个启用推送的应用,它将不会显示在反馈服务中。这是因为删除最后一个应用会破坏与推送服务的持久连接在发送删除通知之前。
您可以通过在设备或计算机上至少保留一个支持推送的应用来解决此问题,以保持持久连接。要保持与生产环境的持久连接,只需从 App Store 安装任何支持推送的免费应用程序,然后您应该能够删除您的应用程序并看到它出现在反馈服务中。
回想一下,每个推送环境都有自己的持久连接。因此要保持与沙盒环境的持久连接,请安装另一个支持开发推送的应用。