2010-10-27 95 views
17

假設這是可能的,我希望我的iOS應用程序在後臺輪詢時輪詢服務器(即基本上每30分鐘檢索一次URL的內容並通知用戶它是否包含某些內容「有趣」),基本上與內置郵件客戶端假設您不使用推送通知的方式類似。現在在後臺輪詢服務器的正確方法

,從我讀書至今(我是一個有經驗的程序員,但新到iOS),我認爲有可能是做這兩種可能的途徑:

  • 方法1:在applicationDidEnterBackground :,開始執行定期輪詢的後臺任務;方法2:向用戶發送一個UILocalNotification(沒有可見文本)給你自己的應用程序,但它只是在X分鐘時間內喚醒你的應用程序來進行輪詢(然後爲下一個tim等發送另一個通知)。

我在蘋果的文檔Scheduling, Registering, and Handling Notifications看到,他們實際上似乎有一個示例usign方法1(他們的「聊天」示例,清單2-2)。但是這種方法令人驚訝的是,它似乎只是坐在輪詢的連續循環中,沒有中間的睡眠;在我更熟悉的平臺上,這將是不明智的,並會燒燬CPU。

所以我的問題的子部分主要有: - 是方法2可能(或必須一個UILocalNotification總是引起視覺警報給用戶,這不是我想要的),如果是是它的推薦方式做這個? - 如果要做到這一點的方法是方法1,蘋果公司的「聊天」的例子是坐在一個連續的循環中,實際上可以(例如,iOS是否配給CPU,這不是問題),如果不是這樣的話在iOS中告訴後臺進程「睡眠X秒/分鐘」?如果蘋果的連續循環無論出於何種原因都可以,那麼輪詢之間的時間間隔是什麼時候呢?

N.B.我明白,能夠在所有背景下運行本質上都是iOS 4的特性。我不介意我的應用程序是否只能在iOS 4中運行。

回答

14

你想做什麼,不包括在iOS4的多任務功能下。只有少數類型的應用程序允許在後臺長時間運行(超過10分鐘),而通用網絡應用程序不是其中之一。

但是,一切都不會丟失。你可以做什麼,我相信你應該做的是使用推送通知。在你的服務器上,你可以鏈接到蘋果的推送通知服務,用戶可以註冊推送通知,你可以知道「有趣的數據」是什麼,或者他們告訴你。當這些數據可用時,您可以通過推送通知立即將其發送給用戶。

它提供了更好的用戶體驗,而且您的應用程序無需在後臺運行。 iOS將處理推送通知的傳送。如果他們在獲取通知時刷卡解鎖手機,則您的應用將打開,並且在此時可以在應用中加載該有用信息。

即使您設法暫停輸入一段時間,您的方法1也無法長期工作,這就是爲什麼:啓動後臺任務只運行一項任務的時間不超過10分鐘,除非您是允許保持運行的三種類型的應用程序。 10分鐘後,操作系統將暫停您。

你的方法2根本不起作用。所有本地通知都向用戶顯示警報視圖。

+0

謝謝 - 這符合我讀過的內容(不幸)。我想知道爲什麼蘋果在這種情況下展示了一個在後臺輪詢聊天服務器的例子。推送通知的主要問題是我想保留客戶端的客戶機密登錄信息,但聽起來像這是不可能的。有趣的是,iPhone的內置郵件客戶端允許違反這條規則,那麼呢? – 2010-10-27 13:43:37

+0

使用不同的認證/授權機制。像OAuth或什麼的東西。其次,我不確定您指的是哪個示例,但它可能會顯示的主要內容是後臺中的基於位置的服務以及「聊天」客戶端。我不知道。 – jer 2010-10-27 14:24:54

3

假設這是可能的...

不幸的是,這是一個錯誤的假設(!)。

你不能在iPhone上使用「多任務」功能,因爲它只允許某些類型的後臺處理(GPS,VoIP,音樂)。要做你想做的事情,你需要在服務器上完成工作並使用推送通知。