콘솔로 이동

이벤트 로깅

이벤트는 사용자 행동, 시스템 이벤트, 오류 등 앱에서 발생하는 상황을 파악하는 수단입니다.

Firebase용 Google 애널리틱스는 몇 가지 이벤트를 자동으로 로깅하며 별도의 코드 없이 이벤트를 수신할 수 있습니다. 앱에서 더 많은 데이터를 수집해야 하는 경우 앱에서 최대 500개의 서로 다른 애널리틱스 이벤트 유형을 로깅할 수 있습니다. 앱에서 로깅할 수 있는 이벤트의 총 분량에는 제한이 없습니다. 이벤트 이름은 대소문자를 구분하며, 이름에서 대소문자만 다른 두 이벤트를 로깅하면 서로 다른 두 개의 이벤트로 인식됩니다.

시작하기 전에

C++용 애널리틱스 시작하기에 설명되어 있는 것과 같이 프로젝트가 설정되어 있고 애널리틱스에 액세스할 수 있는지 확인하세요.

이벤트 로깅

firebase::analytics 모듈을 초기화한 후 이 모듈을 사용하여 LogEvent() 메소드로 이벤트를 로깅할 수 있습니다.

처음 시작하는 개발자를 위해 애널리틱스 SDK는 소매/전자상거래, 여행 및 게임 앱 등의 다양한 앱에서 공통적으로 사용되는 여러 가지 추천 이벤트를 정의합니다. 이러한 이벤트에 대한 자세한 내용 및 사용 방법은 Firebase 고객센터의 이벤트 및 속성 문서를 참조하세요.

추천 이벤트 구현에 관한 자세한 내용은 다음 위치를 참조하세요.

  • 추천 이벤트: Event 상수 목록을 참조하세요.
  • 사전 정의된 매개변수: Parameters 상수 목록을 참조하세요.

다음 예는 SELECT_CONTENT 추천 이벤트를 로깅하는 방법을 보여줍니다.

  const analytics::Parameter kSelectContentParameters[] = {
    analytics::Parameter(analytics::kParameterItemID , id),
    analytics::Parameter(analytics::kParameterItemName, "name"),
    analytics::Parameter(analytics::kUserPropertySignUpMethod, "Google"),
    analytics::Parameter("favorite_food", mFavoriteFood),
    analytics::Parameter("user_id", mUserId),
  };
  analytics::LogEvent(
    analytics::kEventSelectContent, kSelectContentParameters,
    sizeof(kSelectContentParameters) / sizeof(kSelectContentParameters[0]));

사전 정의된 매개변수뿐 아니라 다음과 같은 매개변수를 이벤트에 추가할 수 있습니다.

  • 맞춤 매개변수: 맞춤 매개변수는 애널리틱스 보고서에 직접 표시되지 않지만 잠재고객 정의에서 필터로 사용하여 모든 보고서에 적용할 수 있습니다. 앱을 BigQuery 프로젝트에 연결한 경우 BigQuery로 내보내는 데이터에도 맞춤 매개변수가 포함됩니다.

  • VALUE 매개변수: VALUE는 애널리틱스 이벤트에 해당하는 핵심 측정항목을 수집하는 데 유용한 범용 매개변수입니다. 수익, 거리, 시간, 점수 등을 예로 들 수 있습니다.

애플리케이션에 추천 애널리틱스 이벤트 유형으로 해결되지 않는 특정한 요구사항이 있는 경우 다음 예와 같이 맞춤 애널리틱스 이벤트를 직접 로깅할 수 있습니다.

// Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "firebase/analytics.h"
#include "firebase/analytics/event_names.h"
#include "firebase/analytics/parameter_names.h"
#include "firebase/analytics/user_property_names.h"
#include "firebase/app.h"

// Thin OS abstraction layer.
#include "main.h"  // NOLINT

// Execute all methods of the C++ Analytics API.
extern "C" int common_main(int argc, const char* argv[]) {
  namespace analytics = ::firebase::analytics;
  ::firebase::App* app;

  LogMessage("Initialize the Analytics library");
#if defined(__ANDROID__)
  app = ::firebase::App::Create(GetJniEnv(), GetActivity());
#else
  app = ::firebase::App::Create();
#endif  // defined(__ANDROID__)

  LogMessage("Created the firebase app %x",
             static_cast<int>(reinterpret_cast<intptr_t>(app)));
  analytics::Initialize(*app);
  LogMessage("Initialized the firebase analytics API");

  LogMessage("Enabling data collection.");
  analytics::SetAnalyticsCollectionEnabled(true);
  // App session times out after 30 minutes.
  // If the app is placed in the background and returns to the foreground after
  // the timeout is expired analytics will log a new session.
  analytics::SetSessionTimeoutDuration(1000 * 60 * 30);

  LogMessage("Get App Instance ID...");
  auto future_result = analytics::GetAnalyticsInstanceId();
  while (future_result.status() == firebase::kFutureStatusPending) {
    if (ProcessEvents(1000)) break;
  }
  if (future_result.status() == firebase::kFutureStatusComplete) {
    LogMessage("Analytics Instance ID %s", future_result.result()->c_str());
  } else {
    LogMessage("ERROR: Failed to fetch Analytics Instance ID %s (%d)",
               future_result.error_message(), future_result.error());
  }

  LogMessage("Set user properties.");
  // Set the user's sign up method.
  analytics::SetUserProperty(analytics::kUserPropertySignUpMethod, "Google");
  // Set the user ID.
  analytics::SetUserId("uber_user_510");

  LogMessage("Set current screen.");
  // Set the user's current screen.
  analytics::SetCurrentScreen("Firebase Analytics C++ testapp", "testapp");

  // Log an event with no parameters.
  LogMessage("Log login event.");
  analytics::LogEvent(analytics::kEventLogin);

  // Log an event with a floating point parameter.
  LogMessage("Log progress event.");
  analytics::LogEvent("progress", "percent", 0.4f);

  // Log an event with an integer parameter.
  LogMessage("Log post score event.");
  analytics::LogEvent(analytics::kEventPostScore, analytics::kParameterScore,
                      42);

  // Log an event with a string parameter.
  LogMessage("Log group join event.");
  analytics::LogEvent(analytics::kEventJoinGroup, analytics::kParameterGroupID,
                      "spoon_welders");

  // Log an event with multiple parameters.
  LogMessage("Log level up event.");
  {
    const analytics::Parameter kLevelUpParameters[] = {
        analytics::Parameter(analytics::kParameterLevel, 5),
        analytics::Parameter(analytics::kParameterCharacter, "mrspoon"),
        analytics::Parameter("hit_accuracy", 3.14f),
    };
    analytics::LogEvent(
        analytics::kEventLevelUp, kLevelUpParameters,
        sizeof(kLevelUpParameters) / sizeof(kLevelUpParameters[0]));
  }

  LogMessage("Complete");

  // Wait until the user wants to quit the app.
  while (!ProcessEvents(1000)) {
  }

  analytics::Terminate();
  delete app;

  LogMessage("Shutdown");

  return 0;
}

Android 스튜디오 디버그 로그에서 이벤트 보기

자세한 로깅을 사용 설정하여 SDK의 이벤트 로깅을 모니터링하면 이벤트가 정상적으로 로깅되는지 확인할 수 있습니다. 여기에는 자동으로 로깅되는 이벤트와 수동으로 로깅되는 이벤트가 모두 포함됩니다.

일련의 adb 명령으로 자세한 로깅을 사용 설정할 수 있습니다.

adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC

이 명령어는 이벤트 전송 여부를 즉시 확인할 수 있도록 이벤트를 Android 스튜디오 logcat에 표시합니다.

대시보드에서 애널리틱스 이벤트 보기

Firebase 콘솔 대시보드에서 애널리틱스 이벤트에 대한 종합 통계를 확인할 수 있습니다. 이 대시보드는 주기적, 지속적으로 업데이트됩니다. 즉각적인 테스트가 필요하다면 앞 섹션에서 설명한 logcat 출력을 사용하세요.

Firebase 콘솔에서 이 데이터에 액세스하는 방법은 다음과 같습니다.

  1. Firebase 콘솔에서 프로젝트를 엽니다.
  2. 메뉴에서 애널리틱스를 선택하여 애널리틱스 보고 대시보드를 표시합니다.

앱에서 로깅된 애널리틱스 이벤트 유형별로 자동으로 작성된 이벤트 보고서이벤트 탭에 표시됩니다. 자세한 내용은 Firebase 고객센터에서 애널리틱스 보고 대시보드를 참조하세요.