1
llbgurs 2013-07-04 12:04:26 +08:00 1
怎么可能到100%,网络难免卡一下,挂一下,只能自己处理,如果出错再重发了
|
2
nightspirit OP 那最多能到多少额?貌似在国内的服务器 因为被墙的原因,只能到30%-40%的成功率,成功率太低了,如果服务器在国外还能到80%左右,有没有什么办法能提高呢?
|
3
so898 2013-07-04 19:44:06 +08:00 1
@nightspirit
我去!哪个混蛋跟你说只有30%~40%的…… APNS发送的时候不要只发就完了啊!一定要把苹果给你返回的值留下的!不成功就放回Queue里面继续发! 你说要是国外的成功率都只有80%,那尼玛微信不早就被喷死了…… 哪来的这么信口开河的同事…… |
4
fsw90628 2013-07-04 23:58:35 +08:00
The Apple Push Notification Service includes a feedback service to give you information about failed push notifications.
http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1 |
5
yuanalexwu 2013-07-05 11:50:06 +08:00 1
发推送的时候给每个token加上一个identifier,方便发送失败的时候重新发送
apnsPackFormat = "!BIIH" + str(tokenLength) + "sH" + str(payloadLength) + "s" message = struct.pack(apnsPackFormat, command, identifier, expiry, tokenLength, deviceToken, payloadLength, payload) ssl_conn.sendall(message) socket 建立后不停往服务器发(发送大量推送时候设置休眠,比如每发500个sleep(4)不然推送服务器可能会死机很长时间) # ssl socket 如果发送的过程中出现任何错误都可以去读取反馈信息,获得错误代码并做相应处理 result = -1 self.ssl_conn.settimeout(5) recive = self.ssl_conn.read(BUFF_SIZE) if recive: _, status, identifier = struct.unpack('!BBI', recive) if status == 8: # 8: Invalid token result = identifier return result 处理其他错误参照@fsw90628贴上来的开发文档 |
6
yuanalexwu 2013-07-05 12:03:06 +08:00
你能保证的是根据发送的数量级,将信息发送到APNS服务器。但Apple也不guarantee 100%将信息发送到具体设备上 :3
|
7
railgun 2013-07-05 15:23:03 +08:00 1
APNS本身是不可靠的服务,苹果自己在文档里说了,但是也不是说它的成功率不高,只是说你的业务不应该依赖于APNS服务,比如说不能 没有收到推送,业务流程就跑不下去了。
我用的时候基本上推送都能及时过来,除非用2g网络特别差的情况会有延迟。 另外用楼上说到的feedback功能也是个能提高送达率的好方法。 |
8
est 2013-07-05 15:50:16 +08:00
你同事找了一个为自己烂代码逃脱的借口
|
9
xiaogui 2013-07-05 15:52:06 +08:00
成功率的确不能达到100%,因为有用户会已经把你的应用删掉了。
|
10
nightspirit OP |