簡體   English   中英

應用程序未運行時的iOS 7后台獲取

[英]iOS 7 Background Fetch When the App is Not Running

我編寫了一個簡單的應用程序,以測試和監控iOS7中后台提取功能的工作原理。

首先,我在Info.plist文件中設置了UIBackgroundMode選項。

在此輸入圖像描述

然后;

我加入到下面的代碼到應用:didFinishLaunchingWithOptions:方法中在AppDelegate.m:

在此輸入圖像描述

最后,我已經實現了應用程序:(UIApplication *)應用程序performFetchWithCompletionHandler:方法。

在此輸入圖像描述

每次我單擊Debug-> Simulate Background Fetch按鈕時,它都會更改應用程序的批號並按預期工作。

但是,當應用程序未運行時,我甚至無法使其工作(即使在后台模式下也沒有運行)。

Apple表示,當應用程序未運行且操作系統要分別執行以下方法時:

application:(UIApplication *)application didFinishLaunchingWithOptions:
applicationDidEnterBackground:(UIApplication *)application
application:(UIApplication *)application performFetchWithCompletionHandler:

所以我的問題是,有沒有辦法在應用程序未運行時測試后台提取?

我正在使用iOS 7.1iPod 5th Gen上測試這個。

編輯2:請注意,如果用戶從應用切換器中殺死應用,則后台提取將永遠不會再次發生。 這正如Apple所期望的那樣。 有關詳細信息,請參閱相關的“了解您的應用程序何時啟動到后台”文檔:

在大多數情況下,系統在用戶強行退出后不會重新啟動應用程序。 位置應用程序是一個例外,它在iOS 8及更高版本中被用戶強行退出后重新啟動。

一個舊的開發者論壇帖子(遺憾的是鏈接不再存在)......

“如果您從多任務UI中殺死一個應用程序,系統將永遠不會再次自動啟動該應用程序。這里的邏輯是,如果用戶已殺死您的應用程序,他們可能希望它保持死亡狀態。”

您可以向Web服務器發出一個簡單的GET請求,例如:“ http://dev.example.org/?ping=1 ”,然后在Web服務器上grep access.log以獲取“?ping = 1”

編輯:測試在后台啟動的應用程序的另一種方法(例如:無法雙擊主頁按鈕並切換到它)是通過創建僅后台方案。 轉到產品 - >方案 - >管理方案,然后復制默認方案。

方案設置

然后編輯新方案並單擊選項選項卡並選中“由於后台獲取事件而啟動” - 當您運行應用程序時,它將直接啟動到后台,就像正常使用一樣。

使用后台獲取啟動

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM