디파이너리 SDK 의 세션 관리
팔로우
개요
디파이너리 SDK 를 연동하게 되면 기본적으로 앱의 실행(abx:start_session)과 앱의 종료(abx:end_session)에 대한 이벤트를 받을 수 있습니다.
본 가이드는 디파이너리 SDK 가 앱 실행과 종료에 대한 이벤트를 어떻게 호출하고 관리하는지에 대한 가이드 입니다.
앱 실행과 종료를 판단하는 기준
Android / iOS 앱에서는 각 앱이 화면에 노출되고, 화면에서 내려가는지를 판단하는 API 가 존재합니다. 디파이너리 SDK에서는 이를 감지하여 앱이 실행될 경우 abx:start_session / 앱이 종료될 경우 abx:end_session 을 호출하게 됩니다.
Android 앱 수명 주기 [출처]
Android 경우 위의 다이어그램과 같이 앱의 수명주기 (App Lifecycle) 에 따라 각각 호출하는 메소드가 존재합니다. 위 수명 주기를 기준으로 디파이너리 SDK 의 경우 앱이 실행되는 시점 (onResume())에는 abx:start_session을 그리고 앱이 화면에서 내려가는 시점 (onPause()) 에는 abx:end_session 을 호출하게 됩니다.
iOS 앱 수명 주기 [출처]
iOS 역시 비슷한 형태의 수명주기 모델을 가지고 있습니다. 이 수명 주기에 따라 앱이 실행된 시점 (Active)에 abx:start_session 을 앱이 화면에서 내려가는 시점 (InActivie) 에 abx:end_session 을 호출합니다.
abx:start_session
디파이너리 SDK 는 앱의 실행되는 조건을 세분화 하여 아래의 경우에 대해서 abx:start_session 이벤트를 호출하고 있습니다.
- 사용자가 앱을 설치하고 실행했을 경우. (앱 설치 이벤트인 abx:first_open 이벤트와 함께 호출)
- 이미 앱이 설치되어 있는 상태에서 앱 종료 후 60초가 지난 상태에서 앱을 실행 했을 경우. (60 second Rule)
- 사용자가 디파이너리 콘솔을 통해 발급한 트랙킹 링크를 통해 딥링크 오픈을 했을 경우. (딥링크 오픈 이벤트인 abx:deeplink_open 이벤트와 함께 호출)
- 사용자가 앱을 완전히 메모리에서 내린 상태에서 앱을 실행 했을 경우.
- (Android Only) 사용자가 앱의 캐시 및 데이터를 완전히 삭제한 상태에서 앱 실행 했을 경우. (이 경우 앱의 데이터가 모두 삭제된 상태이므로 앱이 최초 설치 상태가 되며 이 경우 abx:first_open 이벤트도 함께 호출합니다.)
abx:end_session
디파이너리 SDK 에서는 앱이 종료되는 조건을 아래와 같이 정하여 abx:end_session 이벤트를 호출하고 있습니다.
- 사용자가 홈버튼 혹은 멀티태스킹 모드를 통해 앱을 빠져나온 후 60초 이상이 지났을 경우. (60 second Rule)
- 사용자가 홈버튼 혹은 멀티태스킹 모드를 통해 앱을 빠져나온 후 60초가 되기 전에 앱을 메모리에서 내린 후 다시 앱을 실행했을 경우. (이 경우 앱이 메모리에서 내려간 것을 인지하고 앱실행시 호출하지 못한 abx:end_session 을 호출 후 abx:start_session 을 호출합니다.)
60 Second Rule
abx:start_session /abx:end_session 의 이벤트 호출 조건을 보시면 60초 Rule 이 존재합니다. 이 시간은 디파이너리 SDK 에서 앱 실행의 세션을 관리하기 위한 시간으로 사용자가 앱을 화면에서 내린 후 다시 앱을 실행할 수도 있는 점을 고려해서 만든 룰입니다. 즉 사용자가 앱을 화면에서 내린 후 60초 이내에 다시 앱을 실행하게 되면 abx:end_session 은 호출하지 않으며, 세션은 유지가 됩니다.
사용자가 앱을 화면에서 내린 후 60초가 지났을 경우 세션이 종료되었다고 판단하여 abx:end_session 을 호출하게 됩니다. 이 후 다시 앱을 실행하게 되면 세션이 다시 실행되었다는 의미로 abx:start_session 이 호출합니다.
Web
Web의 경우 SDK init시에 abx:start_session이 호출됩니다. page마다 init이 호출되면 abx:start_session 이벤트가 호출됩니다. page종료에 abx:end_session 이벤트를 설정하더라도 page가 강제로 종료되는 경우에는 이벤트 호출이 되지 않습니다. abx:end_session 이벤트 호출을 100% 를 보장할 수 없어서 abx:end_session 이벤트는 사용하지 않고 있습니다.