Ghi nhật ký sự kiện

Chọn nền tảng: iOS+ Android Web Flutter Unity C++


Sự kiện cung cấp thông tin chi tiết về những gì đang xảy ra trong ứng dụng của bạn, chẳng hạn như hành động của người dùng, các sự kiện của hệ thống hoặc lỗi.

Google Analytics tự động ghi lại một số sự kiện cho bạn; bạn không cần thêm mã nào để nhận các sự kiện đó. Nếu ứng dụng của bạn cần thu thập thêm dữ liệu, thì bạn có thể ghi lại tối đa 500 loại sự kiện Analytics khác nhau trong ứng dụng. Không có giới hạn về tổng số lượng sự kiện mà ứng dụng của bạn ghi lại. Xin lưu ý rằng tên sự kiện có phân biệt chữ hoa chữ thường. Khi bạn ghi lại 2 sự kiện có tên giống nhau (chỉ khác ở cách viết hoa viết thường), hệ thống sẽ ghi nhận đó là 2 sự kiện riêng biệt.

Trước khi bắt đầu

Đảm bảo rằng bạn đã thiết lập dự án và có thể truy cập vào Analytics như mô tả trong phần Bắt đầu sử dụng Analytics cho C++.

Sự kiện trong nhật ký

Sau khi khởi chạy mô-đun firebase::analytics, bạn có thể dùng mô-đun này để ghi lại các sự kiện bằng phương thức LogEvent().

Để giúp bạn bắt đầu, SDK Analytics xác định một số sự kiện được đề xuất phổ biến trong nhiều loại ứng dụng, bao gồm cả ứng dụng bán lẻ và thương mại điện tử, du lịch và ứng dụng trò chơi. Để tìm hiểu thêm về các sự kiện này và thời điểm sử dụng, hãy xem các bài viết về Sự kiện và thuộc tính trong Trung tâm trợ giúp của Firebase.

Bạn có thể xem thông tin chi tiết về cách triển khai cho các sự kiện được đề xuất ở những vị trí sau:

  • Sự kiện được đề xuất: xem danh sách hằng số Event.
  • Thông số được quy định: xem danh sách hằng số Parameters.

Ví dụ sau đây minh hoạ cách ghi lại một Sự kiện SELECT_CONTENT được đề xuất:

  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]));

Ngoài các thông số được quy định, bạn có thể thêm các thông số sau vào bất kỳ sự kiện nào:

  • Tham số tuỳ chỉnh: Tham số tuỳ chỉnh không được trình bày trực tiếp trong Analytics báo cáo, nhưng có thể được dùng làm bộ lọc trong định nghĩa về Đối tượng có thể áp dụng cho mọi báo cáo. Tham số tuỳ chỉnh cũng được đưa vào dữ liệu được xuất sang BigQuery nếu ứng dụng của bạn được liên kết với một dự án BigQuery.

  • Tham số VALUE: VALUE là một tham số đa năng, hữu ích cho việc tích luỹ một chỉ số chính liên quan đến một Sự kiện Analytics. Ví dụ: doanh thu, khoảng cách, thời gian và điểm.

Nếu ứng dụng của bạn có nhu cầu cụ thể không được loại Sự kiện Analytics đề xuất đáp ứng, thì bạn có thể ghi lại Sự kiện Analytics tuỳ chỉnh của riêng mình như trong ví dụ sau:

// 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;
}

Xem sự kiện trong nhật ký gỡ lỗi của Android Studio

Bạn có thể bật tính năng ghi nhật ký chi tiết để theo dõi việc ghi nhật ký sự kiện của SDK, giúp xác minh rằng các sự kiện đang được ghi nhật ký đúng cách. Điều này bao gồm cả sự kiện được ghi nhật ký tự động và thủ công.

Bạn có thể bật tính năng ghi nhật ký chi tiết bằng một loạt lệnh adb:

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

Lệnh này hiển thị các sự kiện trong logcat của Android Studio, giúp bạn xác minh ngay rằng các sự kiện đang được gửi.

Xem các sự kiện phân tích trong trang tổng quan

Trong bảng điều khiển Firebase, bạn có thể xem số liệu thống kê tổng hợp về các sự kiện của mình trong trang tổng quan Analytics > Events (Analytics > Sự kiện).

Xin lưu ý những điều sau về trang tổng quan này:

  • Trang tổng quan cho thấy các báo cáo sự kiện được tạo tự động cho từng loại sự kiện riêng biệt được ghi lại trong nhật ký sự kiện của ứng dụng.

  • Trang tổng quan này được cập nhật định kỳ trong suốt cả ngày. Để thử nghiệm ngay, hãy sử dụng bảng điều khiển gỡ lỗi Xcode hoặc kết quả logcat như mô tả trong phần trước của hướng dẫn này.

Đọc thêm về trang tổng quan.