[英]is there any way to Send HTTP Requests in Background Mode (iOS) Periodically?
[英]Send HTTP Requests in Background Mode (iOS) Periodically
我正在為我的應用程序開發一項很棒的功能,該功能需要在后台定期發送 HTTP 請求。
我已經在這里閱讀了很多文章和討論,但還沒有提出解決方案,因為我在stackoverflow.com上遇到的所有建議都只能部分解決問題。
讓我詳細解釋一下我希望我的應用程序做什么。
考慮有一個帶有 API 的網站,我想定期發送請求(當應用程序處於后台模式時)以檢查網站上的數據狀態。 如果數據狀態是可以接受的,我會向用戶發送推送通知,通知他當前數據是正確的。
有人可以提出一個解決方案如何在 iOS 應用程序中實現這個想法嗎?
正如你所描述的,在 iOS 上你不能這樣做。 當您的應用程序處於后台或未運行時,您無法安排任務定期發生。 您也無法控制 iOS 在后台運行時是否決定終止您的應用程序,因此“未運行”是您需要處理的情況(您不能只在后台運行很長時間如你所願)。
不過,我不確定我是否了解服務器端。 如果您的服務器正在處理數據直到它可以接受,並且它可以發送推送通知,為什么它需要等待來自電話的傳入請求? 為什么不在數據准備好時發送推送? 如果應用程序決定什么是“可接受的”,也許讓應用程序告訴服務器它想要什么,以便服務器知道何時發送推送。
有幾個選項可以接近您所描述的。 如果您在應用程序中實現“后台獲取”功能,iOS 將在應用程序未運行時啟動該應用程序,並讓它在后台進行網絡調用。 但是,無法保證這種情況發生的頻率。 這在Apple 的后台執行文檔中有所描述
另一個選項是“靜默”推送通知。 如果您的服務器發送其中之一,iOS 可以在后台啟動應用程序來處理通知。 如有必要,該應用程序可以進行網絡調用。 你可以在任何你喜歡的時間發送這些,但 Apple 警告不要過度發送:
靜默通知並不是為了讓您的應用在后台保持清醒,也不是為了高優先級更新。 APNs 將靜默通知視為低優先級,如果總數過多,可能會完全限制其傳遞。 實際限制是動態的,可以根據條件更改,但盡量不要每小時發送超過幾個通知。
Apple 的推送通知文檔中描述了靜默推送。
如果您的應用程序可以具有后台運行功能,那么您可以做一些事情。
Timer
(NSTimer)。HTTP
請求。例如:
Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(handleHTTPRequest), userInfo: nil, repeats: true)
func handleHTTPRequest() {
// fetch and change the state of data
}
另一種方法是讓delegates
在發生某些事情時執行任務。 當您不想在固定時間間隔內執行時,您可以使用它。
iOS 后台執行限制
Questions
如何讓我的應用程序在后台持續運行?
如果我安排了一個計時器,如何在屏幕鎖定時觸發它?
如何每 15 分鍾在后台運行一次代碼?
如何設置在后台運行的網絡服務器?
我的應用程序如何在后台為我的另一個應用程序提供 IPC 服務?
Answer from Apple:
所有這些的簡短答案是你不能。 iOS 對后台執行有嚴格的限制。 它的默認行為是在用戶將其移至后台后不久暫停您的應用程序; 這種暫停會阻止進程運行任何代碼。
Official:
https ://developer.apple.com/forums/thread/685525
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.