Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

記錄事件

事件可讓您深入了解應用中發生的事情,例如用戶操作、系統事件或錯誤。

谷歌Analytics(分析)會自動記錄一些事件給你;您無需添加任何代碼即可接收它們。如果您的應用需要收集額外數據,您可以在應用中記錄多達 500 種不同的 Analytics 事件類型。您的應用記錄的事件總量沒有限制。請注意,事件名稱區分大小寫,記錄名稱不同的兩個事件將導致兩個不同的事件。

在你開始之前

請確保您已經設置了您的項目,如描述可以訪問Analytics(分析)獲取與分析開始給C ++

記錄事件

你已經初始化後firebase::analytics模塊,可以用它來記錄事件與LogEvent()方法。

為了幫助您入門,Analytics SDK 定義了許多建議事件,這些事件在不同類型的應用程序中很常見,包括零售和電子商務、旅遊和遊戲應用程序。要了解更多有關這些事件和何時使用它們,瀏覽事件和屬性在火力地堡幫助中心文章。

您可以在以下位置找到建議的事件類型的實施詳細信息:

  • 推薦活動:見列表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是一個通用的參數,其用於累積一個關鍵指標有用的是涉及一種分析事件。示例包括收入、距離、時間和積分。

如果您的應用程序具有建議的分析事件類型未涵蓋的特定需求,您可以記錄自己的自定義分析事件,如下例所示:

// 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 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 中顯示您的事件,幫助您立即驗證是否正在發送事件。

在儀表板中查看分析事件

您可以在 Firebase 控制台儀表板中查看有關您的 Analytics 事件的匯總統計信息。這些儀表板全天定期更新。要立即進行測試,請使用上一節中所述的 logcat 輸出。

要在 Firebase 控制台中訪問此數據:

  1. 火力地堡控制台,打開您的項目。
  2. 從菜單中選擇Analytics(分析)來查看分析報告儀表板。

事件選項卡顯示事件報告自動為每個不同類型的分析事件的記錄創建您的應用。了解更多關於Analytics(分析)報告信息中心在火力地堡幫助中心。