본문 바로가기
iOS/설명

[iOS] Push 클릭 후 앱 실행 시 life cycle 콜백 호출 순서

by Sky Titan 2022. 10. 2.
728x90

 push 클릭 후 앱 실행 시, push 수신 시에 실행되는 콜백이 어느 타이밍에 실행되는지 알고 싶어서 확인 해보았다.

 

1. Push 클릭 하지 않고 앱 실행 시 순서

  1. application didFinishLaunchingWithOptions
    • inactive
  2. viewDidLoad
  3. viewWillAppear
  4. applicationDidBecomeActive
  5. viewDidAppear
    • active

 

 

2. Push 클릭 후 앱 실행 시 순서 (slient push x)

  1. application didFinishLaunchingWithOptions
    1. inactive
  2. userNotificationCenter didReceive
    • push 핸들링 콜백이 viewDidLoad보다 먼저 호출이 된다.
    • 즉, push 도착 후 핸들링하는 로직이, ViewController가 호출된 후에 이루어져야 하는 작업이라면 closure에 보관해놓고 나중에 실행할 필요가 있음
  3. viewDidLoad
  4. viewWillAppear
  5. viewDidAppear
    1. inactive
  6. applicationDidBecomeActive
    • 일반적인 실행 때와 다르게 viewDidAppear 이 후에 호출된다.
    • 아마 push handler 콜백의 completionHandler()가 실행되면서 뭔가 순서 상에 변화가 생기는 듯 함

 

3. Push 클릭 후 앱 실행 시 순서 (slient push O)

  1. application didFinishLaunchingWithOptions
    • background state
    • 다른 경우와 다르게 application state background 상태
  2. application didReceiveRemoteNotification
  3. viewDidLoad
  4. viewWillAppear
  5. viewDidAppear
  6. applicationWillEnterForeground
    • 원래 최초 실행 때는 호출되지 않는 콜백인데 호출이 되었다.
    • 아마 slient push 수신 시 실행되는 application didReceiveRemoteNotification이 호출되면 
  7. userNotificationCenter didReceive
  8. applicationDidBecomeActive

 

위의 결과로 확인 가능한 것

  1. push관련 콜백들이 rootViewController 초기화 이전에 호출이 되기 때문에, push 수신 후 handling하는 코드들이 rootViewController가 초기화 된 이후에 동작해야한다면 우선 closure에 보관해놨다가 rootViewController 초기화 이후 실행해야한다.
  2. silent push의 경우, 앱 실행 시 초기 application state가 background로 되어 있다. 이유는 정확히 모르겠음
728x90

'iOS > 설명' 카테고리의 다른 글

[iOS] Xcode Target, Scheme  (0) 2022.10.11
[iOS] Xcode build configuration debug vs release  (0) 2022.10.11
[iOS] UI event를 main thread에서 처리해야하는 이유  (0) 2022.10.02
[iOS] @main의 역할  (0) 2022.10.01
[iOS] accessbilityIdentifier  (0) 2022.09.25

댓글