사용자 화면 추적

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

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

nameclassName은 non 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());