사용자 화면 추적


Hackle SDK는 ViewController 단위로 화면 정보를 수집합니다.
ViewController를 1개만 사용하는 구조의 앱이거나 SwiftUI 를 사용하는 경우 자동으로 화면 정보를 수집하기 어렵습니다.

$page_view$engagement 이벤트를 정상적으로 수집하려면, 화면이 변경될 때마다 setCurrentScreen 메소드를 직접 호출해야 합니다.

setCurrentScreen

iOS SDK 2.59.0 이상 버전에서 정식으로 지원하는 기능입니다.

setCurrentScreen(screen) 메소드에 인자로 화면 명과 화면의 클래스 명을 인자로 받아 화면을 추적합니다.

  • 화면 추적의 최소 단위 시간은 1초 입니다.
  • 1초 이내에 변경된 페이지의 $engagement 는 측정되지 않습니다.
파라미터타입필수설명
namestring필수현재 화면의 명입니다.
classNamestring필수별도의 클래스 명을 남기지 않을 경우 name과 동일한 값을 기입하면 됩니다.
🚧

동일 화면에 대한 화면 추적은 할 수 없습니다.

이전 화면과 동일한(name과 className이 모두 동일한) Screen으로 setCurrentScreen을 호출한 경우 화면 전환이 되지 않은 것으로 인식되어 아무런 동직을 하지 않습니다.

  • $page_view, $engagement가 호출되지 않습니다.

예시

Swift UI를 사용하는 경우 onAppearonChange가 발생할 때 모두 화면 추적을 하는 것을 추천합니다.

let screen = Screen.builder(name: "screenName", className: "screenName")
    .build()

Hackle.app()?.setCurrentScreen(screen: screen)
HackleScreen *screen = [[[HackleScreenBuilder alloc] initWithName:@"screenName" 
                                                         className:@"screenName"] build];
[[Hackle app] setCurrentScreenWithScreen:screen];
struct MainView: View {
    @Environment(\.scenePhase) var scenePhase

    let screen = Screen.builder(name: "screenName", className: "screenName")
      .build() 

    var body: some View {
        VStack {
            Text("메인 화면")
        }
        .onAppear {
            // 뷰가 나타날 때 화면 추적
            Hackle.app()?.setCurrentScreen(screen: screen)
        }
        .onChange(of: scenePhase) { oldPhase, newPhase in
            // 백그라운드 -> 포그라운드 전환될 때 화면 추적
            // 전환될 때 앱의 화면이 변하는 케이스가 없으면 호출하지 않아도 무방합니다.
            if newPhase == .active {
                Hackle.app()?.setCurrentScreen(screen: screen)
            }
        }
    }
}

속성 (Property)

핵클 SDK는 이벤트(Event) 객체에 속성을 추가할 수 있도록 지원합니다.

  • 이벤트 객체에 추가 가능한 속성 개수는 최대 64개입니다.

구분

타입

제약사항

속성 명(key)

string

  • 글자수 제한은 128자입니다. (128 characters)
  • 대소문자를 구분하지 않습니다. 예를 들어 amount와 AMOUNT는 같은 키로 인식합니다.

속성 값(value)

boolean, string, number, array

  • string 타입인 경우 글자수 제한은 1024자입니다. (1024 characters)
  • number 타입인 경우 정수 최대 15자리, 소수점 최대 6자리를 지원합니다.

예시

let screen = Screen.builder(name: "screenName", className: "screenName")
    .property("key", "value")
    .build()

Hackle.app()?.setCurrentScreen(screen: screen)
HackleScreen *screen = [[[[HackleScreenBuilder alloc] initWithName:@"screenName" 
                                                          className:@"screenName"]
                          property:@"key" value:@"value"]
                         build];
[[Hackle app] setCurrentScreenWithScreen:screen];

automaticScreenTracking 비활성화

SDK에서는 기본적으로 automaticScreenTracking이 활성화되어 있습니다.
ViewController 단위의 자동 화면 정보 수집을 원하지 않는 경우 automaticScreenTracking를 비활성화 해야 합니다.

SDK를 초기화 할 때 automaticScreenTracking을 설정할 수 있습니다.

❗️

automaticScreenTracking이 활성화 된 상태에서 setCurrentScreen를 통해 수동으로 화면 수집을 하는 경우, $page_view$engagement가 과수집 되거나 의도하지 않은 속성으로 수집될 수 있습니다.

수동으로 화면 정보를 수집하는 경우 automaticScreenTracking 비활성화를 추천합니다.

Example

let config = HackleConfigBuilder()
  .automaticScreenTracking(false)
  .build()

Hackle.initialize(sdkKey: YOUR_APP_SDK_KEY, config: config) {
    // SDK ready to use.
}
HackleConfigBuilder *builder = [[HackleConfigBuilder alloc] init];
[builder automaticScreenTracking:false];
HackleConfig *config = [builder build];

[Hackle initializeWithSdkKey:@"YOUR_APP_SDK_KEY" config:config completion:^{
    // SDK ready to use.
}];