Updating Your App with Background App Refresh

Panther·2021년 8월 16일
0

https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background/updating_your_app_with_background_app_refresh

"Fetch content opportunistically in the background and update your app's interface."

필요에 따라 백그라운드에서 컨텐트를 가져오고 앱의 인터페이스를 업데이트합니다.

Overview

백그라운드 앱 리프레시는 앱이 주기적으로 백그라운드에서 작동하도록 해줌으로써 컨텐트를 업데이트할 수 있게 해줍니다. 뉴스 앱 혹은 소셜 미디어 앱처럼 컨텐트를 빈번하게 업데이트 하는 앱은 컨텐트가 항상 최신일 수 있도록 이 기능을 사용할 수 있습니다. 필요하기 전에 백그라운드에서 데이터를 다운로드하는 것은 사용자가 앱을 launch했을 때 해당 데이터 표시를 지연시키는 것을 최소화합니다.

앱에서 백그라운드 앱 리프레시를 지원하려면 아래처럼 하시기 바랍니다.

  1. 앱에서 백그라운드 가져오기 기능을 활성화합니다.
  2. launch 타임에 UIApplicationsetMinimumBackgroundFetchInterval(_:) 메소드를 호출합니다.
  3. 앱 딜리게이트에서 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)
}

백그라운드 앱 리프레시의 부재가 앱의 사용자 경험에 중요한 영향을 미치는 경우 어떤 기능이 사용 가능한지를 확인하기 위한 UIApplicationbackgroundRefreshStatus 속성을 확인할 수 있습니다. 사용자는 앱 혹은 설정에서 모든 앱에 대해 백그라운드 앱 리프레시를 비활성화할 수 있습니다. 만약 사용자에게 앱에서 이 기능을 활성화할 것을 프롬프트하면, 사용자의 결정을 존중하고 다시 프롬프트를 하지 않는 것이 좋습니다.

See Also


Background Execution

Extending Your App's Background Execution Time

앱이 백그라운드로 이동할 때 중요한 작업을 마무리할 수 있도록 합니다.

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

About the Background Execution Sequence

앱이 백그라운드로 이동할 때 커스텀 코드가 수행되는 순서에 대해 알아봅니다.

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


0개의 댓글