(iOS)Background fetch를 구현하는 방법

4120 단어 iOSSwift3.0Xcode8

Background fetch란?



앱을 실행하지 않아도 OS의 판단에 적절하다고 생각되는 타이밍에서 임의의 처리를 백그라운드에서 실행할 수 있습니다.

1단계 Background fetch 활성화



Capabilities → Background Modes → Background fetch를 켭니다.


2단계 모든 작업을 수행할 간격 지정



AppDelegate.swift의 didFinishLaunchingWithOptions
application.setMinimumBackgroundFetchInterval (UIApplicationBackgroundFetchIntervalMinimum)
구현합니다.

※ UIApplicationBackgroundFetchIntervalMinimum이라고 해도 OS의 판단으로 처리가 불리기 때문에, 항상 불리는 것은 아닙니다.

AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

    return true
}

3단계 백그라운드에서 수행되는 프로세스 구현



처리를 구현합니다.
처리가 끝나면 completionHandler를 구현해야합니다.
약 30초간 유예가 주어지고 있으므로, 이 사이에 처리를 완료해 completeHandler를 호출할 수 있도록 합시다.
만약 completeHandler가 불리지 않으면 다음에 백그라운드에서 불릴 때의 간격에 영향을 주는 것 같습니다.

AppDelegate.swift
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    //バックグラウンドで実行する処理

    //適切なものを渡します  新規データ: .newData 失敗: .failed データなし: .noData
    completionHandler(.newData)
}

디버깅 방법①



Edit Scheme...에서 아래를 열고 Background Fetch의 Launch due to a background fetch event를 체크합니다.
이제 실행하면 performFetchWithCompletionHandler가 호출됩니다.


디버깅 방법②



Debug → Simulate Background Fetch를 선택하면 performFetchWithCompletionHandler가 호출됩니다.
단지 실제 기계에서는 왜 잘 작동하지 않았습니다.


마지막으로



자신을 위한 메모로 남겼습니다.

좋은 웹페이지 즐겨찾기