iOS/설명

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

Sky Titan 2022. 10. 2. 16:53
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