iPhone 的推送為什麼可以在網路沒有連接的情況下使用?
一直有一個疑慮, iPhone 的推送好奇怪的樣子。比如我在學校的無線網路並沒有登陸的情況下,這時卻可以收到微信之類的推送信息(有內容),但是點進去的時候絕對是在連接中的狀態,微博什麼的也不能刷新,然後必須登陸我的無線ID才可以刷出來內容,求問是什麼個情況,消息是如何推送進來的?
補充:我也遇到一樣的情況。我們學校是VPN,接入Wi-Fi之後還需要個人的賬號密碼登錄。但是在未登錄的情況下,也能看到推送的消息(比如QQ收到的新信息)。但如果你進入QQ,還是無網路,刷新不出的狀態(因為Wi-Fi並未登錄)。這些都是發生在我沒有打開蜂窩移動的時候。
題主遇到的情況我也有過,手機沒有開 3G 網路,只連接了學校的 Wi-Fi ,但是沒有經過賬號登錄,仍然可以收到通知消息,其實這個跟埠有關係。先上 Apple 關於 Push 的官方文檔吧。
If a cellular or Wi-Fi connection is not available,neither the application:didRegisterForRemoteNotificationsWithDeviceToken: method nor the application:didFailToRegisterForRemoteNotificationsWithError: method is called. For Wi-Fi connections, this sometimes occurs when the device cannot connect with APNs over port 5223. If this happens, the user can move to another Wi-Fi network that isn』t blocking this port or, on an iPhone or iPad, wait until the cellular data service becomes available. In either case, the device should be able to make the connection, and then one of the delegation methods is called.
意思大概是說,如果沒有網路鏈接的話,推送就到達不了(廢話。。。),如果鏈接 Wi-Fi 了,5223 埠不能用,就會嘗試轉移到別的 Wi-Fi 網路 嘗試通過 5223 埠請求鏈接 APNs(蘋果推送伺服器),如果能鏈接到,就可以通過鏈接收到推送消息了。
也就是說,蘋果的推送伺服器走的埠不是我們平常上網的 80 埠,或者帶加密的 443埠(https),而是 5223 埠,如果你們學校的限制上網軟體沒有限制5223埠的話,你當然可以收到這個通知,沒法刷新微博等等,那是因為,限制了 80 埠。哦對了,80埠就是 http 埠我們學校的WLAN也是這樣,並且不僅可以推送,還可以收發iMessage的文字信息,我猜想是推送用的網路埠與web認證的埠不一樣。
iOS有wifi休眠策略,在移動數據和wifi同時打開時,屏幕關閉一段時間後wifi自動關閉以省電,推送走移動網路。在屏幕打開的那一刻wifi模塊啟動然後恢復連接,這個wifi通知欄圖標現實出來的延遲肉眼可見。
類似的情況,youtube的推送信息都是可以收到的,即使在牆內。
因為推送用的是 Cellular Data,也就是流量
為何禁用了某個軟體的蜂窩網路,非wifi情況下還是能推送信息?豈不是意味著這個app還是可以使用蜂窩網路?
感覺朱煥傑同學說的這個比較靠譜。。。。 自己想想覺得應該是這個情況 thx~~~
就是用的蜂窩數據。把SIM卡拔出來以後絕對就沒戲了。
遠程iOS推送肯定是需要網路的,本地推送才不需要網路。由於校園網本身就是個區域網,在斷開網路之前通信雙方已經建立連接了,即使沒有網路數據也是可以走通的,類似p2p傳輸一樣。晚上校園網斷網後 「 MSN 」可以正常使用也是這個道理。所以LZ應該是在跟同校園的同學聯繫。沒在校園網內實際測過,不知道微信是否有這種機制。
因為 iOS 的推送機制,也就是通知中心,和短消息差不多。你在設置里允許一個應用進入通知中心,那麼這個應用的伺服器就會時不時向你的通知中心發短消息。即使你的這個應用沒有登陸,你的通知中心還是能收到這個短消息。然後一個推送就彈出來了。
如果你不允許一個應用使用通知中心,那麼這個應用只有在連接狀態下才可以收到推送。推薦閱讀:
※用WebSocket做WebApp應用內推送體驗如何?流量消耗是否可接受?
※mqtt各種broker如何選擇?
※知乎的 comet 實現機制是怎樣的?
※怎麼使用gcm推送?
※Android推送SDK哪家好?