2011-07-12

iOS的通知原理

iPhone (iOS 3.0開始)上有個「通知」的功能
可以讓程式在背景運作時繼續接收網路上的資訊
神奇的是
通知不但非常的省電
而且程式被關閉後仍可及時的更新資訊
這是如何辦到的呢?



這邊我節錄了一個中文網站


iPhone的Push(推送通知)功能原理淺析

簡單來說
在沒有系統的輔助下
應用程式(這邊以MSN為例)必須直接跟provider(微軟伺服器)通訊
因此MSN必須在手機上不斷的與微軟伺服器連線
相當消耗資源(浪費電又會讓手機變得很頓)

而Apple做了一個雲端的service
稱之為Apple Push Notification Service (APNS)
在MSN啟動後會對APNS註冊
往後就由APNS來對微軟伺服器連線
因此MSN便可進入休眠/關閉
等到APNS收到微軟伺服器的訊息
就會通知手機上的iOS
iOS就會喚醒/啟動MSN

有計算機或作業系統相關領域知識的人會發現
這個動作就跟輪詢(polling)與中斷(interrupt)非常類似
輪詢就像早期手機上的應用程式
必須時時刻刻探訪伺服器
而中斷就像APNS
只在有必要的時候喚醒對應的程式

以下舉知名通話軟體viber與skype做例子:
iPhone版Viber軟體,以驚人優異功能挑戰Skype

 在此程式關閉時,也能讓用戶收到來電通知,,並可直接撥打,免去了註冊登入的麻煩,更在背景執行時做到不耗電,其貼心的設計及功能,相信將讓Skype倍感壓力!
viber由於採用了APNS
所以viber在背景執行時其實是靠APNS來代理其工作
因此相較於skype
viber幾乎不耗電
也不會佔用CPU拖累其他程式
名符其實的「程式被關閉(釋放記憶體)後仍可繼續執行」!

最後
如何分辨應用程式是否支援APNS
也就是通知呢?
很簡單
如果應用程式開啟通知的地方是在:設定->通知->XXX
那就是支援APNS
反之就不是了
如Skype的通知就是在:設定->Skype

沒有留言:

張貼留言