본문 바로가기

iOS

iOS - Background Task & Fetch 정리

iOS에서는 많은 부분들이 제약이 되어있습니다.


iOS 7 버전부터는 멀티 테스킹을 지원한다고 해서 백그라운드에서 어떠한 작업을 하는 것이 가능하다고 나와있었고,


그래서 그 방법들을 하나씩 알아보려고 합니다.




P.S 모든 내용들은 제가 공부하면서 적은 것들로 정확하지 않을 수 있으니 틀린 내용이 있다면


댓글에 꼭 적어주시면 감사하겠습니다.





1. Background Task


Background Task는 만약 앱 사용자가 어떠한 작업을 하는 중에 (ex : 서버에 이미지 전송)


홈 버튼을 눌러 앱에서 나가거나 카톡이 와서 다른 앱으로 넘어갈 경우에 기존에 실행중이던 작업을 끝내지 못하고


앱이 종료될 때 사용되는 방법으로,


만약 실제로 서버에 이미지를 업로드시키는 것이라면 이미지 업로드 버튼을 눌렀을 때


application.beginBackgroundTask


로 시작을 알리고, 작업이 끝날 때에는 


application.endBackgroundTask


로 끝을 정해주면 그 작업 중간에 나가게 되면 그 작업이 길지 않은 작업이라면 계속 백그라운드에서 돌게 하는 방법입니다.



실제로 구현이 이렇게 간단하진 않고 beginBackgroundTask를 실행을 시키면 UIBackgroundTaskIdentifier라는 리턴 값이 오고


백그라운드에서 작업을 할 수 있는 DispatchQueue를 만들고 background에서 실행되게 설정을 한 후에


작업이 다 끝나고 마지막에 리턴 받은 값을 endBackgroundTask()안에 넣어서 task를 끝내는 방법으로 사용되는 것 같습니다.





2. Remote Notification


Notification은 Local Notification과 Remote Notification으로 나눠 지는데


Local Notification은 말 그대로 Local에서 생성되는 Notification으로 네이티브에서 직접 구현할 수 있습니다.


그렇다면 Remote Notification은 클라우드메세징 서버(ex: GCM, FCM)에서 앱으로 Notification을 쏘면


AppDelegate 파일의 didReceiveRemoteNotification 함수가 호출되며 특정 작업을 할 수 있습니다.


아직 Remote Notification은 사용해 보지 않아서 구현방법은 모르지만 대부분의 구현은 설정과 서버에서 구현이 됩니다.






(추가중)