尝试进行推送通知时获取SSL Broken pipe错误

ema*_*gic 18 iphone apple-push-notifications

我们开发了一个iPhone应用程序,并为开发和临时版本提供推送通知.但是当我们尝试向我们数据库中的真实用户设备发送推送通知时,我们得到了SSL连接重置,然后是管道错误.我们认为我们的数据库中可能有太多设备(超过70000),因此无法同时发送所有消息.所以我们尝试将消息发送到1000个设备一次,但仍然有大约100条消息的"Broken pipe"错误.我们不确定邮件是否已发送.有什么建议吗?

ema*_*gic 20

我们已经解决了这个问题.它由于我们的数据库表中的无效令牌而被破坏.如果存在无效令牌,Apple apns服务将断开我们的连接.由于连接断开,当您尝试再次发送邮件时,它将出现"Broken Pipe"错误.基本解决方案是查找写入管道是否成功,如果没有,只需断开连接并在延迟一段时间后重新连接.

  • 我希望你已经解释了你是如何编码的 - Mona Jun 14 23:52 (12认同)

Mon*_*ngo 11

emagic是正确的,无效令牌可能会出现"破管"错误的一个原因.它也可能出现一些其他原因.以下是Apple Technical Note TN2265:

最常见的问题是无效的设备令牌.如果令牌来自沙箱环境,例如当您在内部测试开发构建时,则无法将其发送到生产推送服务.每个推送环境都会为同一设备或计算机发出不同的令牌.如果您确实将设备令牌发送到错误的环境,则推送服务会将其视为无效令牌并丢弃该通知.

无效的设备令牌也可能意味着用户已从其设备或计算机中删除了您的应用.对于不再有效的设备令牌,您应该每天至少检查一次反馈服务.

其他可能的问题可能是发送超过256个字节的有效负载,您的有效负载可能没有正确格式化,或者您的JSON字典可能有不正确的语法.

在您的提供商闲置时偶尔会出现断开连接而无需担心; 只需重新建立连接并继续.如果其中一个推送服务器已关闭,则负载平衡机制将透明地将新连接定向到另一个服务器,假设您通过主机名而不是静态IP地址进行连接.