PushKit 是什么?
「iOS 必知必會(huì) - APNs 篇」有提到不同類型的推送,可能有人會(huì)問(wèn)除了 APNs 推送還有其他的嗎?事實(shí)上,蘋果在 iOS 8 新引入了一種全新的推送通知類型,被稱作 voip 推送,及一個(gè)全新的名為 PushKit 的框架。voip 推送區(qū)別于傳統(tǒng)的 APNs 推送,它可以讓 APP 即使進(jìn)程被殺死,也能在收到推送時(shí)執(zhí)行指定的代碼。
PushKit 有什么用?
簡(jiǎn)單的說(shuō),PushKit 中的 voip 推送能幫助我們改善 voip 應(yīng)用的體驗(yàn)。這是因?yàn)?voip 推送能在 app 進(jìn)程被殺死時(shí)也執(zhí)行指定的代碼,而且實(shí)測(cè)延時(shí)在 1 秒左右,可以說(shuō)是準(zhǔn)實(shí)時(shí)了。這樣 APP 通常就不需要再維持和 voip 服務(wù)器的長(zhǎng)連接了。看來(lái)蘋果的目的就是為了減少后臺(tái)的長(zhǎng)連接方案,因?yàn)楹笈_(tái)長(zhǎng)連接方案卡頓、耗電、影響用戶體驗(yàn)呀!
那為什么 APNs 就不行呢?
這是因?yàn)?APNs 的兩個(gè)限制:APNs 的通知是系統(tǒng)彈出的,APP 其實(shí)是無(wú)法直接獲取通知內(nèi)容的;APNs 的通知到來(lái)時(shí),APP 也無(wú)法提前執(zhí)行指定代碼,如彈出接聽界面。
假設(shè)我們用 APNs 來(lái)做 voip 推送,用戶收到來(lái)電提醒的通知后點(diǎn)開 APP,然后由于 APP 無(wú)法拿到通知內(nèi)容,因此需要和服務(wù)器交互后才知道哪個(gè)用戶呼叫自己,接著還要準(zhǔn)備好接聽界面并彈出,一來(lái)二去實(shí)時(shí)性差了很多。
而采用 voip 推送,APP 在收到來(lái)電提醒的通知后,根據(jù)通知內(nèi)容就可以知道哪個(gè)用戶呼叫該設(shè)備,進(jìn)而準(zhǔn)備好接聽界面并彈出本地通知告訴用戶有新的來(lái)電,用戶點(diǎn)開 APP 就能直接看到彈出的接聽界面了。
PushKit 與 APNs 的對(duì)比
PushKit 的 voip 推送 | 傳統(tǒng)的 APNs 推送 | |
---|---|---|
收到推送時(shí)的行為 | 可以執(zhí)行代碼 | 只能彈出系統(tǒng)通知 |
是否需要用戶授權(quán) | 是 | 否 |
推送長(zhǎng)度 | iOS 8 及以上 2Kb,以下 256 字節(jié) | 4096 字節(jié)(4Kb) |
證書類型 | iOS Push Services | VoIP Services |
相比 APNs 推送,PushKit 的 voip 推送主要優(yōu)點(diǎn)在:
- 即使用戶在通知里關(guān)掉「允許通知」,或者 APP 進(jìn)程被殺掉,也可以通過(guò) PushKit 推送喚醒 APP 進(jìn)而執(zhí)行代碼。明顯 PushKit 功能更強(qiáng)大。
- PushKit 的 deviceToken 獲取無(wú)需用戶授權(quán),且在 APP 卸載重裝后也不會(huì)發(fā)生變化。
PushKit 的幾點(diǎn)說(shuō)明
- 雖然 PushKit 功能更強(qiáng)大,但它只在 iOS 8 以上才支持,并且只能 voip 應(yīng)用才能使用(蘋果會(huì)審核應(yīng)用是否是 voip 應(yīng)用)。
- APNs 推送 和 PushKit 推送 這里比較的都是基于二進(jìn)制的舊協(xié)議,如果采用基于 HTTP/2 的新協(xié)議,則這兩種不同類型的推送也只需要配置一種證書。
參考:
(完)