이벤트는 사용자 행동, 시스템 이벤트, 오류 등 앱에서 발생하는 상황을 파악하는 수단입니다.
Google Analytics는 몇 가지 이벤트를 자동으로 로깅하며 별도로 코드를 추가하지 않아도 이벤트를 수신할 수 있습니다. 앱에서 데이터를 추가로 수집해야 하는 경우 서로 다른 Analytics 이벤트 유형을 최대 500개까지 로깅할 수 있습니다. 앱에서 로깅할 수 있는 이벤트의 총분량에는 제한이 없습니다. 이벤트 이름은 대소문자를 구분합니다. 이름은 동일하지만 대소문자만 다른 두 이벤트를 로깅하면 서로 다른 이벤트 2개로 인식됩니다.
시작하기 전에
AnalyticsC++용 애널리틱스 시작하기에 설명되어 있는 것과 같이 프로젝트가 설정되어 있고 Analytics에 액세스할 수 있는지 확인하세요.
이벤트 로깅
firebase::analytics
모듈을 초기화한 후 이를 사용하여 LogEvent()
메서드로 이벤트를 로깅할 수 있습니다.
시작하는 데 도움을 제공하기 위해 Analytics 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]));
사전 정의된 매개변수뿐 아니라 다음과 같은 매개변수를 이벤트에 추가할 수 있습니다.
맞춤 매개변수: 맞춤 매개변수는 Analytics 보고서에 직접 표시되지 않지만 잠재고객 정의에서 필터로 사용하여 모든 보고서에 적용할 수 있습니다. 앱을 BigQuery 프로젝트에 연결한 경우 BigQuery로 내보내는 데이터에도 맞춤 매개변수가 포함됩니다.
VALUE
매개변수:VALUE
는 Analytics 이벤트에 해당하는 핵심 측정항목을 집계하는 데 유용한 범용 매개변수입니다. 수익, 거리, 시간, 점수 등을 예시로 들 수 있습니다.
애플리케이션에 Analytics 이벤트 유형으로 해결되지 않는 특정한 요구사항이 있으면 다음 예시와 같이 커스텀 Analytics 이벤트를 직접 로깅할 수 있습니다.
// 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("Log current screen."); // Log the user's current screen. analytics::LogEvent(analytics::kEventScreenView, "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 Console 대시보드에서 Analytics 이벤트의 집계된 통계를 확인할 수 있습니다. 이 대시보드는 주기적, 지속적으로 업데이트됩니다. 즉각적인 테스트가 필요하다면 앞 섹션에서 설명한 logcat 출력을 사용하세요.
Firebase 콘솔에서 이 데이터에 액세스하는 방법은 다음과 같습니다.
- Firebase Console에서 프로젝트를 엽니다.
- 메뉴에서 Analytics를 선택하여 Analytics 보고 대시보드를 표시합니다.
앱에서 로깅된 Analytics 이벤트 유형별로 자동으로 작성된 이벤트 보고서가 이벤트 탭에 표시됩니다. 대시보드에 관해 자세히 알아보세요.