通过事件可以深入了解应用中发生的情况,例如用户操作、系统事件或错误。
Google Analytics(分析)会自动为您记录一些事件,您无需为了接收这些事件而添加任何代码。如果您的应用需要收集其他数据,您可以在应用中记录各种不同的 Analytics 事件类型,最多可达 500 种。应用可记录的事件总量不受限制。请注意,事件名称区分大小写。即便两个事件的名称只是大小写不同,系统也会将其视作两个不同的事件。
准备工作
确保您已按照 C++ 版 Analytics 使用入门中的说明设置了您的项目,并且可以访问 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 Studio 调试日志中查看事件
您可以启用详细日志记录功能以监控 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 Studio logcat 中显示您的事件,帮助您立即验证所发送的事件。
在信息中心内查看 Analytics 事件
您可以在 Firebase 控制台信息中心内查看有关您的 Analytics 事件的汇总统计信息。这些信息中心会全天定时更新。如需立即测试,请按照上一部分中所述的方式使用 logcat 输出进行测试。
如需在 Firebase 控制台中访问这些数据,请执行以下操作:
- 在 Firebase 控制台中,打开您的项目。
- 从菜单中选择 Analytics 以查看 Analytics 报告信息中心。
事件标签页会显示事件报告,这些报告是针对应用所记录的每种独特的 Analytics 事件自动创建的。详细了解信息中心。