PushKit 是什么?
「iOS 必知必会 - APNs 篇」有提到不同类型的推送,可能有人会问除了 APNs 推送还有其他的吗?事实上,苹果在 iOS 8 新引入了一种全新的推送通知类型,被称作 voip 推送,及一个全新的名为 PushKit 的框架。voip 推送区别于传统的 APNs 推送,它可以让 APP 即使进程被杀死,也能在收到推送时执行指定的代码。
PushKit 有什么用?
简单的说,PushKit 中的 voip 推送能帮助我们改善 voip 应用的体验。这是因为 voip 推送能在 app 进程被杀死时也执行指定的代码,而且实测延时在 1 秒左右,可以说是准实时了。这样 APP 通常就不需要再维持和 voip 服务器的长连接了。看来苹果的目的就是为了减少后台的长连接方案,因为后台长连接方案卡顿、耗电、影响用户体验呀!
那为什么 APNs 就不行呢?
这是因为 APNs 的两个限制:APNs 的通知是系统弹出的,APP 其实是无法直接获取通知内容的;APNs 的通知到来时,APP 也无法提前执行指定代码,如弹出接听界面。
假设我们用 APNs 来做 voip 推送,用户收到来电提醒的通知后点开 APP,然后由于 APP 无法拿到通知内容,因此需要和服务器交互后才知道哪个用户呼叫自己,接着还要准备好接听界面并弹出,一来二去实时性差了很多。
而采用 voip 推送,APP 在收到来电提醒的通知后,根据通知内容就可以知道哪个用户呼叫该设备,进而准备好接听界面并弹出本地通知告诉用户有新的来电,用户点开 APP 就能直接看到弹出的接听界面了。
PushKit 与 APNs 的对比
PushKit 的 voip 推送 | 传统的 APNs 推送 | |
---|---|---|
收到推送时的行为 | 可以执行代码 | 只能弹出系统通知 |
是否需要用户授权 | 是 | 否 |
推送长度 | iOS 8 及以上 2Kb,以下 256 字节 | 4096 字节(4Kb) |
证书类型 | iOS Push Services | VoIP Services |
相比 APNs 推送,PushKit 的 voip 推送主要优点在:
- 即使用户在通知里关掉「允许通知」,或者 APP 进程被杀掉,也可以通过 PushKit 推送唤醒 APP 进而执行代码。明显 PushKit 功能更强大。
- PushKit 的 deviceToken 获取无需用户授权,且在 APP 卸载重装后也不会发生变化。
PushKit 的几点说明
- 虽然 PushKit 功能更强大,但它只在 iOS 8 以上才支持,并且只能 voip 应用才能使用(苹果会审核应用是否是 voip 应用)。
- APNs 推送 和 PushKit 推送 这里比较的都是基于二进制的旧协议,如果采用基于 HTTP/2 的新协议,则这两种不同类型的推送也只需要配置一种证书。
参考:
(完)
网友评论
无法推送成功的问题,可以参看下之前写的这篇:https://www.jianshu.com/p/13185cba2abf,里面有收不到推送的问题排查办法。