"Fetch content opportunistically in the background and update your app's interface."
필요에 따라 백그라운드에서 컨텐트를 가져오고 앱의 인터페이스를 업데이트합니다.
백그라운드 앱 리프레시는 앱이 주기적으로 백그라운드에서 작동하도록 해줌으로써 컨텐트를 업데이트할 수 있게 해줍니다. 뉴스 앱 혹은 소셜 미디어 앱처럼 컨텐트를 빈번하게 업데이트 하는 앱은 컨텐트가 항상 최신일 수 있도록 이 기능을 사용할 수 있습니다. 필요하기 전에 백그라운드에서 데이터를 다운로드하는 것은 사용자가 앱을 launch했을 때 해당 데이터 표시를 지연시키는 것을 최소화합니다.
앱에서 백그라운드 앱 리프레시를 지원하려면 아래처럼 하시기 바랍니다.
UIApplication
의 setMinimumBackgroundFetchInterval(_:)
메소드를 호출합니다.application(_:performFetchWithCompletionHandler:)
메소드를 구현합니다.시스템이 앱 딜리게이트의 application(_:performFetchWithCompletionHandler:)
메소드를 호출할 때 새로운 데이터 다운로드를 위한 URLSession
객체를 설정하시기 바랍니다. 시스템은 네트워크 및 전원 상태가 좋을 대까지 기다리기 때문에 적합한 양의 데이터를 빠르게 가져올 수 있도록 해야만 합니다. 앱 업데이트가 끝나면 컴플리션 핸들러를 호출하고, 더 이상 새로운 데이터가 없다는 내용을 포함할 수 있는 결과를 제공하시기 바랍니다.
Important
정확한 결과와 함께 주기적인 방법으로 컴플리션 핸들러를 호출하는 것은 앱이 나중의 실행 시간을 얼마나 가져야 하는지를 결정하는 데 도움이 됩니다. 앱 업데이트 너무 길게 가져가면, 시스템은 전원을 절약하기 위해 앱을 덜 빈번하게 스케줄링할 것입니다.
Listing 1은 백그라운드 요청 및 처리 방법을 보여줍니다. 앱에 대한 Xcode 프로젝트는 백그라운드 가져오기 기능을 활성화하고, 앱은 launch 타임에 한 시간마다 업데이트를 요청합니다. 실행 시간을 받으면, 앱은 새로운 데이터 사용이 가능한지를 확인합니다. 만약 그렇다면 앱은 메인 피드에 해당 데이터를 추가합니다.
Listing 1 Fetching data from a server in the background
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// Fetch data once an hour.
UIApplication.shared.setMinimumBackgroundFetchInterval(3600)
// Other initialization…
return true
}
func application(_ application: UIApplication,
performFetchWithCompletionHandler completionHandler:
@escaping (UIBackgroundFetchResult) -> Void) {
// Check for new data.
if let newData = fetchUpdates() {
addDataToFeed(newData: newData)
completionHandler(.newData)
}
completionHandler(.noData)
}
백그라운드 앱 리프레시의 부재가 앱의 사용자 경험에 중요한 영향을 미치는 경우 어떤 기능이 사용 가능한지를 확인하기 위한 UIApplication
의 backgroundRefreshStatus
속성을 확인할 수 있습니다. 사용자는 앱 혹은 설정에서 모든 앱에 대해 백그라운드 앱 리프레시를 비활성화할 수 있습니다. 만약 사용자에게 앱에서 이 기능을 활성화할 것을 프롬프트하면, 사용자의 결정을 존중하고 다시 프롬프트를 하지 않는 것이 좋습니다.
앱이 백그라운드로 이동할 때 중요한 작업을 마무리할 수 있도록 합니다.
https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background/extending_your_app_s_background_execution_time
https://velog.io/@panther222128/Extending-Your-Apps-Background-Execution-Time
앱이 백그라운드로 이동할 때 커스텀 코드가 수행되는 순서에 대해 알아봅니다.
https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background/about_the_background_execution_sequence
https://velog.io/@panther222128/About-the-Background-Execution-Sequence