為什麼 Gmail for Android 消息推送得這麼快?

幾乎是收到郵件的瞬間就能推送過來。


@Lancy 說的不太對

只說郵件應用的推送,跟用 GCM 和 APNS 其實關係不大,因為在 App 層面上肯定用這個推送 ( Android 可以用第三方的,效果差不多)。比如 Gmail for Android 也有用 GCM,所以這裡用什麼推送不影響速度。

但是為什麼收郵件還是有快有慢呢?

區別在這裡:RFC 2177 - IMAP4 IDLE command

客戶端有沒有實現 IMAP IDLE command 才是影響速度的關鍵。

你可以把 IDLE command 想像成一個 Long-Polling。

比如你如果用 Mailbox,那麼一有新郵件 Gmail 就會通過 IDLE 告訴 Mailbox 的伺服器,然後 Mailbox 會馬上通過 GCM/APNS 推送到客戶端,這時候你就能馬上收到推送啦。

那麼這裡其實有兩層推送:

Gmail Server ----IDLE----&> Mailbox Server ----GCM----&> Mailbox Client

當然在 Android 上,Gmail 還是會比別的客戶端都快一點,那是因為 Gmail 自己既是郵件服務提供方也是客戶端,所以省去了 IMAP IDLE 推送的時間(1秒左右)。

Gmail Server ----GCM----&> Gmail Client

其實 Apple Mail 是支持 IDLE command 的,可是不知道為毛就是不支持 Gmail 的 IDLE,只能用普通的 Polling,所以在 iOS Devices 上,收通知最慢的是 Apple Mail,Gmail for iOS 和其他的速度都差不多。


這問題沒說是什麼平台上的gmail啊。。

如果是android平台的話,開啟了Google service的話,是一直與Google連接的,所以秒push。這點和iOS上的原生郵件應用登陸iCloud mail一樣。也是一直連接的所以秒push

至於說為什麼iOS上gmail應用比原生郵件應用登陸gmail push快是因為他們機理不同。原生mail登陸gmail與登陸iCloud不同,他不是一直連接的,而是間隔多少時間到Google的伺服器問一下是否有新郵件。而gmail應用走的是apple的推送服務,既Google發現你有新郵件後,立刻告訴蘋果,蘋果和你是長連接的,所以就立刻告訴你。所以是秒push。

補充:

昨天床上爪機碼字,比較亂,補充一下好了:

iOS上面的gmail,即使你開啟了IMAP,也是通過獲取而不是推送獲得新信息的。(以iOS6為例,打開設置-郵件、通訊錄、日曆-獲取新數據-高級,即可看到哪些賬戶支持PUSH)

以前Google支持exchange的時候,我們還可以用exchange獲得PUSH支持,不過現在Google已經不支持exchange了。

BTW,不支持exchange之後,google contact和google cal同步都變得巨慢無比。。

反正我已經是全線遷移到iCloud了,通訊錄日曆reminder都是秒同步。

小結:如果你用android,我建議你繼續使用google service來同步,如果你用iPhone,用iCloud省心很多。


如果應用場景在國內的話,並且沒有刷歐美的ROM,顯然GCM(Google Cloud Messaging System)機制是不能發揮作用的,而消息推送在Google Android平台上採用的是GCM的方式。

GCM API和官方介紹:Google Cloud Messaging for Android

GCM中文介紹:[Google Android] Google Cloud Messaging for Android

其他推送機制介紹:http://itindex.net/detail/41887-android-消息

無外乎上述範圍或簡化版或混合版。


推薦閱讀:

Gmail 改變了什麼?
谷歌是不是故意的?
既然Inbox做的這麼好了,那我們還為什麼要用Gmail的應用呢?
Gmail 接近飽和,如何增加容量?
Google Translate的影響力有多大?

TAG:Gmail | 谷歌Google | Android |