Things take time

[SWIFT] XCODE내 Background Modes에 대하여.. 본문

iOS (기능)

[SWIFT] XCODE내 Background Modes에 대하여..

겸손할 겸 2017. 8. 1. 09:57

[Background Modes]



이 부분은 사실 실습은 하지 못했고.. 구글링을 통해 얻게 된 정보들을 정리하려 한다.

원래 알게 된 계기는 푸시를 받았을 때 네이티브 단에서 앱의 뱃지 카운트를 올리기 위해 여러가지 실습중에 알게 되었다.


결론적으로 네이티브 단에서 푸시를 받았을 때 뱃지 카운트를 자동 증가할 수 있는 방법은 없다고한다.

안드로이드에서는 가능하지만, 아이폰에서는 서버단에서 푸시를 보내는 JSON데이터 안에 badge 키 값에 값을 할당하는 수밖에..(물론 네이티브 푸시 세팅에서 뱃지를 받겠다고도 설정해야 함)


어쨌든, 백그라운드 모드란.. 앱이 현재 실행중이지 않은 상태, 홈버튼을 누른 상태를 의미한다. 이 상태에서 여러 기능을 작동시킬 때 사용한다.

여기서 기능을 작동시키는 스위치만을 적용할 수 있으며, 실제 그 동작을 작동시키는 코드는 AppDelegate.swift의 각 함수를 오버라이드해서 사용해야 한다.



모든 것을 다 알아본 것은 아니라서..

여기서 Background fetch, Remote notifications에 대해서 간략히 정리한다.


백그라운드 페치는 말 그대로, 백그라운드 모드에서 데이터를 페치(가져오다)하기 위함인데

AppDelegate.swift에서 application:didFinishLaunchingWithOptions라는 메소드에서 사용하면 된다. 앱이 실행되면 자동으로 호출되는 메소드다. 푸시 관련 작업이나 맵 같은 초기 API값 등을 세팅하는 등에서 활용하는 메소드인데, 여기에서 Background fetch를 사용할 경우도 작성하면 된다.


예를들면, 업데이트 체크와 같은 로직을 넣을 수 있다. 시간 설정등을 통해 어느 간격마다 호출되는 방식인데, OS에게 일임하는 방식으로 사용하면 개발자가 원하는 시간이 아니라 OS에서 페치하기 좋은 시간에 작동한다고 한다.

관련 키워드 : UIApplicationBackgroundFetchIntervalMinimum



리모트 노티피케이션은 말 그대로 푸시가 떠오르는데.. 일반적으로 사용하는 푸시가 아니라, 사일런트 푸시라하여 푸시를 받으면 백그라운드에서 작업해야하는 경우를 의미한다. 백그라운드 페치는 일정 시간 간격으로 계속 돌기 때문에, 빈번한 업데이트 등에서는 활용할 수 있으나 어쩌다 오는 경우에 백그라운드를 사용해야할 경우, 좋지 않은 코드가 된다.

이때 사용하는 부분이며 작성하는 메소드는 아래와 같다. 만약 사용하지 않는다면 completionHandler가 없는 didReceiveRemoteNotification을 사용할 것

관련 키워드 : public func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Swift.Void)