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