2014-05-07 41 views
7

使用iOS7,可能需要使用completionHandler進行遠程通知。是否可以爲UILocalNotifications做同樣的事情?使用UILocalNotifications,使用完成處理程序和後臺提取進行遠程通知

基本上,我想要一個web服務以30秒的規則時間間隔發佈我的一些數據,即使應用程序在後臺。爲此,我認爲有3個選項,但沒有任何獲得幫助:

  1. 背景提取:這將在後臺工作,但由於不是強制性的,iOS將始終調用此背景下,我不能用它在我所需的時間間隔取回。

  2. 遠程通知:此功能完美。但是每隔30秒我都必須發佈遠程推送通知,這實際上並不實際。如果我可以在本地處理它也會很好。

  3. UILocalNotifications:這裏沒有完成處理程序。用戶將需要打開該應用程序。所以這不起作用!

還有其他的選擇嗎?或者即使使用iOS7,仍然無法在本地進行後臺操作?

請幫忙。謝謝!

+0

爲什麼你需要將信息發送到服務器,這樣的時候,如果用戶甚至沒有看你的應用程序? – Rivera

+0

@Rivera它的東西,用戶將開始錄製,它應該繼續,即使應用程序在後臺。它僅在用戶停止時停止。奇怪的要求,我知道!但這就是我需要建立的! – mayuur

+0

錄製什麼?也許你可以在本地錄製? Apple會檢查您的應用程序消耗多少,並調整其調用背景方法的頻率,因此您最好不要通過將數據發送到服務器來實現「eco」。 – Rivera

回答

5

您已經涵蓋了所有選項,正如您所看到的,這不受支持。出於好的理由,大多數情況下,在後臺喚醒應用程序是一項代價高昂的操作(在iOS7中,應用程序完成其後臺工作後會拍攝快照),每30秒執行一次操作會對電池壽命造成破壞。

鑑於您尚未提及需要發佈的數據,在大多數情況下,我建議您重新設計您的應用以便與用戶的電池友好。如果您需要位置報告,請考慮聆聽重大位置更改,而不是每30秒記錄一次。

濫用推送通知是可能的(請注意,無聲遠程通知受Apple限速限制),但請考慮您的用戶擁有的體驗。

如果您覺得此功能應該存在並且缺失,您應該向Apple打開增強請求,並在此處張貼雷達編號,以便人們可以複製它。

2

後臺提取是您的問題的直接答案。只要iOS可以定期執行任務,後臺提取就會啓動您的提取處理程序。所有你需要做的就是啓動你在

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler 

NSURLSession要求NSURLConnection的不再是服務呼叫有效的API或也不支持後臺任務。憑藉其先進的iOS 7優勢,NSURLSession顯然是NSURLConnection的替代API。從蘋果的IOS文檔添加下面,文檔

NSURLSession is a replacement API for NSURLConnection. It provides 
options that affect the policy of, and various aspects of the 
mechanism by which NSURLRequest objects are retrieved from the 
network. 

背景取間隔可以被設置爲限定用於背景的重複頻率取,但它也考慮待處理操作

- (void)setMinimumBackgroundFetchInterval:(NSTimeInterval)minimumBackgroundFetchInterval; 

iOS的操作系統資源的因素和7清楚地給出了一種更新應用程序內容的更好方法,但是它像iOS一般一樣尊重設備資源&。希望這回答你的問題。

1

其實,所有看起來像你不能在背景的定期時間與web服務進行通信。

UILocalNotifications或Remote Notifications需要用戶的操作來喚醒應用程序,如果它是後臺的。 編輯:從開始的iOS 7.0遠程通知可以喚醒應用程序,但它不是一個靈活的解決方案

的iOS允許後臺多活動,使用指定的UIBackgroundModes的一個應用程序,請參見「爲表3-4背景模式應用「:

Here is a link to related Apple docs

如果您的應用程序沒有定位直接BG模式之一,我阿尼爾·庫馬爾(以上職務)同意這樣的背景下獲取是這裏最有用的東西。但是它並不完全符合你的需求。 [UIApplication setMinimumBackgroundFetchInterval:]它並不意味着任何嚴格的時間。它意味着最小間隔(或所需時間)。下面是詳細信息:

performFetchWithCompletionHandler never gets fired

感謝

+1

關於遠程通知,我錯了。如果用戶沒有在任務管理器中使用刷卡專門殺死應用程序,則可以使用遠程通知在後臺喚醒應用程序,前提是推送有效負載以正確的時間間隔到達。但這是一個壞主意。 –

+0

@LeoNatan同意,從iOS 7.0開始,遠程通知可以喚醒應用程序。感謝澄清。 –

相關問題