728x90
push 클릭 후 앱 실행 시, push 수신 시에 실행되는 콜백이 어느 타이밍에 실행되는지 알고 싶어서 확인 해보았다.
1. Push 클릭 하지 않고 앱 실행 시 순서
- application didFinishLaunchingWithOptions
- inactive
- viewDidLoad
- viewWillAppear
- applicationDidBecomeActive
- viewDidAppear
- active
2. Push 클릭 후 앱 실행 시 순서 (slient push x)
- application didFinishLaunchingWithOptions
- inactive
- userNotificationCenter didReceive
- push 핸들링 콜백이 viewDidLoad보다 먼저 호출이 된다.
- 즉, push 도착 후 핸들링하는 로직이, ViewController가 호출된 후에 이루어져야 하는 작업이라면 closure에 보관해놓고 나중에 실행할 필요가 있음
- viewDidLoad
- viewWillAppear
- viewDidAppear
- inactive
- applicationDidBecomeActive
- 일반적인 실행 때와 다르게 viewDidAppear 이 후에 호출된다.
- 아마 push handler 콜백의 completionHandler()가 실행되면서 뭔가 순서 상에 변화가 생기는 듯 함
3. Push 클릭 후 앱 실행 시 순서 (slient push O)
- application didFinishLaunchingWithOptions
- background state
- 다른 경우와 다르게 application state background 상태
- application didReceiveRemoteNotification
- viewDidLoad
- viewWillAppear
- viewDidAppear
- applicationWillEnterForeground
- 원래 최초 실행 때는 호출되지 않는 콜백인데 호출이 되었다.
- 아마 slient push 수신 시 실행되는 application didReceiveRemoteNotification이 호출되면
- userNotificationCenter didReceive
- applicationDidBecomeActive
위의 결과로 확인 가능한 것
- push관련 콜백들이 rootViewController 초기화 이전에 호출이 되기 때문에, push 수신 후 handling하는 코드들이 rootViewController가 초기화 된 이후에 동작해야한다면 우선 closure에 보관해놨다가 rootViewController 초기화 이후 실행해야한다.
- 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 |
댓글