이벤트 로깅 확인하는 똑똑한 방법

sokyte
daily-monster
Published in
7 min readFeb 25, 2024

안녕하세요. 일욜 괴물 소깡입니다,

오늘은 이벤트 로깅을 확인하는 똑똑한 방법 중 하나인 Google Analytics를 사용하는 방법을 확인해 보겠습니다.

먼저, 우리가 Google Analytics를 통해서 확인하고 싶은 목표와 작업은 아래와 같습니다.

[ 목표 ]

  • 어떤 화면에 자주 진입을 하고 있는지,
  • 어디까지 스크롤 진행하고 화면 전환을 하는지

[ 확인 가능한 이벤트 ]

  • 화면 진입 후 버튼 탭 하는 시점 / 시간 / 격차
  • 특정 이벤트에 대한 로그 등록 및 확인 가능
  • 만약 스크롤에 대한 이벤트를 추적하고 싶다면?
  • 프로젝트 내에서 UIScrollDelegate > offset 기준으로 > 어느정도 움직이면 Log가 찍히도록

초기 세팅

  1. Firebase Console -> Firebase 프로젝트 생성
  2. Firebase 앱 등록, GoogleService-Info.plist 다운로드하여 프로젝트에 포함
  3. sdk 설치 || spm 설치
  4. FirebaseSDK 초기화 코드 작성

DebugView 활성화

  • Firebase Debug 모드 활성화 — Arguments 추가

Firebase 콘솔 안에서 데이터를 확인하는 부분인 DebugView는 (사용자 기기의 배터리 절약과 네트워크 데이터 사용량을 줄이기 위하여) 약 1시간동안 앱에서 취합된 후 일괄 업로드하지만, Arguments를 추가할 경우 지연 시간을 최소화하여 분석에 집중 가능

  • Edit Scheme -> Run -> FIRDebugEnabled 인자 추가
  • -FIRDebugEnabled 추가
  • = Debug 모드 사용, 명시적으로 -FIRDebugDisabled를 실행하기 전까지 Debug 모드로 설정
  • (optional)
  • -FIRAnalyticsDebugEnabled : Xcode Debug Console에 log 표시 여부

각 변수는 위의 이미지와 동일하게 “-”까지 작성해야 하고 만약 시뮬레이터에 이미 앱이 설치되어 있다면 삭제 후 빌드해야 합니다.

이벤트 로깅

  • 시뮬레이터가 아니라 실기기에서 테스트 해야 로깅 기록 확인 가능
  • Analytics.logEvent(_:parameters:)를 사용하여 로깅
  • setUserID(:), setUserProperty(:forName:)과 같이 사용자 속성을 설정하여 보고서에 필터로 적용하면 다양한 사용자 세그먼트의 행동 분석이 가능 (단, 데이터가 보고서에 포함되기까지 몇시간 소요)
import UIKit
import FirebaseAnalytics

final class ViewController: UIViewController {

private lazy var nextButton: UIButton = {
let button = UIButton()
button.setTitle("다음", for: .normal)
button.setTitleColor(.white, for: .normal)
button.backgroundColor = .systemBlue
return button
}()

override func viewDidLoad() {
super.viewDidLoad()

view.addSubview(nextButton)

nextButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
nextButton.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
nextButton.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
])

nextButton.addTarget(self, action: #selector(touchUpNextButton), for: .touchUpInside)

}

@objc func touchUpNextButton() {
let event = "didTapNextButton"
let parameters = [
"file": #file,
"function": #function
]

Analytics.setUserID("userID = \\(1234567890)")
Analytics.setUserProperty("ko", forName: "country")
Analytics.logEvent(AnalyticsEventSelectItem, parameters: nil)
Analytics.logEvent(event, parameters: parameters)
}

}

이렇게 코드를 작성하면 아래처럼 이벤트 로그를 확인할 수 있습니다.

→ 해당 함수가 호출된 클래스 이름, 함수 명 확인 가능

*위 그래프와 함께 확인할 수 있는 화면은 실기기에서 앱 사용 후 24시간이 지난 이후에 데이터를 확인할 수 있습니다.

  • didTap~~Button의 횟수
  • 화면 로드 횟수
  • 사용자 id, 앱이 빌드된 나라

.. 등등 확인할 수 있습니다.

좀 더 확장 가능한 형태로 사용하고 싶다면?

import FirebaseAnalytics

// Obejctive-C
+ (void)logEventWithName:(NSString *)name
parameters:(nullable NSDictionary<NSString *, id> *)parameters
NS_SWIFT_NAME(logEvent(_:parameters:));
// Swift
logEvent(_ name: String, parameters: [String : Any]?

name

  • 이벤트의 이름
  • 1 ~ 40 알파벳 || _ 사용
  • 알파벳으로 시작해야 하며, 이미 시스템적으로 예약된 예약어는 사용할 수 없습니다.
  • parameters
  • [String : Any]? 타입의 딕셔너리 형태
  • nil은 이벤트의 param이 존재하지 않는다는 것을 의미합니다.

이벤트의 기록은 logEvent()를 통해 이뤄집니다.

GA는 특정 하나의 부분에서 발생하는 것이 아니라, 유저의 이벤트가 발생하는 곳, 서비스 전체에서 발생할 수 있습니다. 관리를 보다 수월하게 하기 위해서 아래의 방법을 채택했습니다.

  1. singleton으로 logEvent만 사용하는 Manger를 만들어서 Manager를 호출하여 이벤트를 기록할 수 있습니다.
  2. 이벤트의 종류가 많기 때문에 enum으로 관리할 수 있습니다.

이렇게 하여 간단한 이벤트 로그를 확인해 보았는데요, 좀 더 확장된 형태로 사용한다면 유저를 트래킹 할 수 있고, 문제가 생겼을 때에도 어떤 시나리오에서 문제가 발생했는지 좀 더 수월하게 확인할 수 있습니다. :)

--

--