APNS 推送不到和断连接(连接被RST)问题调查

有很多原因会使APNS断连接,或者推送不到。比如最常见的

  • ssl证书类型(开发证书/生产证书/企业证书)和devicetoken不匹配,连接正常,发送推送消息时会被断连接
  • devicetoken不对,连接会被断开,如果是带id的请求,会收到错误回复。
  • 客户端设备和APNS的连接状态不正常时(也就是客户端没有任何网络连接),APNS只会保存你的app的最后一个推送消息,之前的就丢弃了。
本文不是讨论上面这些常见问题,搜索一下结果非常多。重点如下:

(一) 和APNS保持长连接时,比如过了一晚上,连接会状态异常或者发第一个推送时被断开。

贴个老外的描述:
APNs works correctly while there is jobs to process
when a bad token or another problem occurs, APNs reconnects automatically
during the night, after two hours of inactivity, APNs acts like everything works but no notification is actually received by the phone

根据帖子里的经验,做了个每半小时定时主动重连APNS连接。之后过一晚上之后连接状态也正常了。但是不久后发现了下面的问题。

(二) 和APNS的连接在一段时间没有消息发出时,也就是有些人说的inactive时,下次再发的第一个推送之后会被断连接,返回104错误。被APNS rst掉。

测试了很多次,发现一旦连接有一段时间没有发消息就会出现这种情况。而且时间不定,时长时短。
连接每2-4个小时(2个小时的比较多)左右,连接就会被rst掉,这个是知道的,所以加了定期主动重连,
可是发现一段时间空闲再发就被rst的几率非常大,和2小时这个根本不是一回事。
而且由于此时没有APNS的错误码返回,不知道是1条消息还是多条消息被APNS丢弃,所以不知道从哪个消息开始重发。

找不到解决办法,只能无奈的每次发送推送前判断下和上一次推送消息间隔多长时间,拍脑门的做成超过2分钟空闲再发消息时主动重连一次。
有个担心就是不知什么情况下会被当做攻击呢~ 苹果的说明太模糊了~~ 真是耐人寻味。难道是吓死胆小的撑死胆大的?

具体rst的细节可参考Yang兄的这篇《关于苹果推送的问题》http://blog.csdn.net/yangqisheng/article/details/9226191

朋友们谁有比较靠谱的解决方法一定告知小弟呀~~ 期待ing

你可能感兴趣的:(APNS 推送不到和断连接(连接被RST)问题调查)