사용자 화면 추적

사용자 화면 추적은 Flutter SDK 2.21.0 이상에서 사용하실 수 있습니다.

📘

Flutter에서의 화면 이동은 아래 Flutter 개발자 문서를 참고해주세요.

Flutter는 기본적으로 단일 Activity/ViewController 구조를 사용하므로, 자동으로 화면 정보를 수집하기 어렵습니다.

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

setCurrentScreen

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

  • 화면 추적의 최소 단위 시간은 1초입니다.
  • 1초 이내에 변경된 페이지의 $engament는 측정되지 않습니다.

예시

NavigatorObserverdidPush, didPop과 같은 라우트 변경 감지 메소드 안에서 setCurrentScreen을 호출하는 방식을 권장합니다.

import "package:hackle/hackle.dart";

class HackleRouteObserver extends NavigatorObserver {
  final NavigationService _navigationService = NavigationService();

  @override
  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
    super.didPush(route, previousRoute);
    _setCurrentScreen(route);
  }

  @override
  void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
    super.didPop(route, previousRoute);
    if (previousRoute != null) {
      _setCurrentScreen(previousRoute);
    }
  }

  @override
  void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
    super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
    if (newRoute != null) {
      _setCurrentScreen(newRoute);
    }
  }

  void _setCurrentScreen(Route route) {
    var name = route.settings.name;
    if (name == null || name.isEmpty) {
      return;
    }

    HackleApp.setCurrentScreen(Screen(name: name, className: name));
  }
}

Screen

현재 화면 정보를 담은 객체입니다.

name과 className은 nullable 하지 않기 때문에 익명 라우팅을 하는 경우 화면 추적을 할 수 없습니다.

name

현재 화면의 명입니다.

className

현재 화면의 클래스 명입니다.
별도의 클래스 명을 남기지 않을 경우 name과 동일한 값을 기입하면 됩니다.


(optional) automaticScreenTracking 비활성화

SDK에서는 기본적으로 automaticScreenTracking이 활성화되어 있습니다.
automaticScreenTracking 옵션을 통해서는 Android/iOS의 Activity 및 ViewController의 이동이 추적됩니다.

Flutter에서 MainActivity 및 ViewController의 추적을 원하지 않는 경우 automaticScreenTracking를 비활성화 해야 합니다.

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

예시

await HackleApp.initialize("YOUR_API_KEY",
    hackleConfig: HackleConfigBuilder()
      .automaticScreenTracking(false)
      .build());