iOS的即时通讯推送服务APNs

本文介绍了Apple Push Notification service (APNs) 的历史和旧协议的问题,包括连接不稳定和反馈机制不明确等。苹果在2015年引入了基于HTTP/2的新APNs协议,解决了长连接、状态反馈和推送长度限制等问题,提供了更高效的推送服务。新协议支持JSON格式、状态码和错误信息,允许开发者更准确地跟踪推送状态,同时简化了证书管理。然而,APNs仍然存在推送到达率不保证的问题,与Google Cloud Messaging形成竞争。开发者需要更新SDK或服务以支持新协议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

APNs 协议15 年 12 月 17 日更是推出了革命性的新特性。但在国内传播的博客、面试题里关于 APNs 的答案全都是旧的、且是不准确的。

 

对 APNs 的吐槽

APNs 是 Apple Push Notification service 的简称(注意 APNs 的大小写, s不需要大写)。

反人类的旧APNs协议设计

在介绍新版 APNs 前,让我们来吐槽下旧的基于二进制的 APNs 协议设计是多么反人类。

在理论上,推送分发的服务器要打开一个同 APNs 网关服务器的连接,并保持这个连接。但在旧的协议下,APNs 服务却不保证 socket 能维持这个连接。如果通道上没有消息往来,空闲下来到话,socket将被路由掐断。也就是说:APNs 连接说断就断,而你无能为力。有意思的是:在旧的协议下,如果服务器响应成功的话,你将不会收到任何回应,但是如果服务器响应失败(例如,使用了一个非法的 Push token),服务器将返回了一个错误编码,并关闭这个socket。最重要的是,你必须重新发送使用这个无效 token 以后发送的所有推送(详情见示意图)。因此,你可能一直不能确定你的推送是否成功的被 APNs 服务器接收。

成功了不响应,失败了才响应,这个是最大的反人类。于是许多开发者想到了一个很 tricky 的办法:利用这个“漏洞”,比如在每发送10条后故意发送一个错误的token,如果APNs有响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值