关于ios推送问题。

2013-07-04 10:08:09 +08:00
 nightspirit
apns这个ios的推送技术,在服务器端会有一定的失败率吗?同事说这个成功率不能达到100%,求高手给个方案,怎么样能到100%?
4445 次点击
所在节点    iDev
10 条回复
llbgurs
2013-07-04 12:04:26 +08:00
怎么可能到100%,网络难免卡一下,挂一下,只能自己处理,如果出错再重发了
nightspirit
2013-07-04 19:00:44 +08:00
那最多能到多少额?貌似在国内的服务器 因为被墙的原因,只能到30%-40%的成功率,成功率太低了,如果服务器在国外还能到80%左右,有没有什么办法能提高呢?
so898
2013-07-04 19:44:06 +08:00
@nightspirit
我去!哪个混蛋跟你说只有30%~40%的……

APNS发送的时候不要只发就完了啊!一定要把苹果给你返回的值留下的!不成功就放回Queue里面继续发!
你说要是国外的成功率都只有80%,那尼玛微信不早就被喷死了……
哪来的这么信口开河的同事……
fsw90628
2013-07-04 23:58:35 +08:00
yuanalexwu
2013-07-05 11:50:06 +08:00
发推送的时候给每个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贴上来的开发文档
yuanalexwu
2013-07-05 12:03:06 +08:00
你能保证的是根据发送的数量级,将信息发送到APNS服务器。但Apple也不guarantee 100%将信息发送到具体设备上 :3
railgun
2013-07-05 15:23:03 +08:00
APNS本身是不可靠的服务,苹果自己在文档里说了,但是也不是说它的成功率不高,只是说你的业务不应该依赖于APNS服务,比如说不能 没有收到推送,业务流程就跑不下去了。
我用的时候基本上推送都能及时过来,除非用2g网络特别差的情况会有延迟。
另外用楼上说到的feedback功能也是个能提高送达率的好方法。
est
2013-07-05 15:50:16 +08:00
你同事找了一个为自己烂代码逃脱的借口
xiaogui
2013-07-05 15:52:06 +08:00
成功率的确不能达到100%,因为有用户会已经把你的应用删掉了。
nightspirit
2013-07-08 15:21:30 +08:00
@xiaogui
@railgun
@yuanalexwu
@fsw90628
@so898
感谢各位给的提示。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/74708

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX