تسجيل الأحداث

اختيار المنصة: iOS+ Android Web Flutter Unity C++


تقدِّم الأحداث إحصاءات حول ما يحدث في تطبيقك، مثل إجراءات المستخدم أو أحداث النظام أو الأخطاء.

Google Analytics تسجِّل بعض الأحداث تلقائيًا لك، ولا تحتاج إلى إضافة أي رمز لتلقّيها. إذا كان تطبيقك بحاجة إلى جمع بيانات إضافية، يمكنك تسجيل ما يصل إلى 500 نوع مختلف من أحداث Analytics في تطبيقك. لا يوجد حدّ أقصى للحجم الإجمالي للأحداث التي يسجِّلها تطبيقك. تجدر الإشارة إلى أنّ أسماء الأحداث حسّاسة لحالة الأحرف، وأنّ تسجيل حدثَين يختلف اسم كل منهما عن الآخر في حالة الأحرف فقط يؤدّي إلى تسجيل حدثَين مختلفَين.

قبل البدء

تأكَّد من إعداد مشروعك ومن إمكانية الوصول إلى Analytics كما هو موضّح في البدء في استخدام Analytics لـ C++‎.

أحداث السجلّ

بعد تهيئة وحدة 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 Events على النحو الموضّح في المثال التالي:

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

يعرض هذا الأمر أحداثك في logcat في "استوديو Android"، ما يساعدك في التحقّق فورًا من إرسال الأحداث.

عرض أحداث "إحصاءات Google" في لوحة البيانات

في وحدة تحكّم Firebase، يمكنك عرض إحصاءات مجمَّعة عن أحداثك في لوحة بيانات إحصاءات Google > الأحداث.

يُرجى ملاحظة ما يلي بشأن لوحة البيانات هذه:

  • تعرض لوحة البيانات تقارير الأحداث التي يتم إنشاؤها تلقائيًا لكل نوع مختلف من الأحداث التي يسجِّلها تطبيقك.

  • يتم تعديل لوحة البيانات بشكلٍ دوري على مدار اليوم. لإجراء اختبار فوري، استخدِم وحدة تحكّم تصحيح الأخطاء في Xcode أو ناتج logcat كما هو موضّح في القسم السابق من هذا الدليل.

مزيد من المعلومات عن لوحة البيانات.