تخصيص تقارير الأعطال على الويب

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


في وحدة تحكّم Firebase (عمليات التطوير والتفاعل > لوحة بيانات Crashlytics)، يمكنك النقر على مشكلة والحصول على تقرير الأحداث المفصّل. يمكنك تخصيص هذه التقارير وإدارة جمع بيانات القياس عن بُعد لمساعدتك في فهم ما يحدث في تطبيق الويب بشكل أفضل:

الإبلاغ عن الاستثناءات التي تم التعامل معها آليًا

يمكنك تسجيل الاستثناءات التي تم التعامل معها يدويًا باستخدام recordError. يتم التقاط أخطاء التوجيه والاستثناءات غير المكتشفة تلقائيًا بواسطة حدود أخطاء إطار العمل.

في ما يلي كيفية تتبُّع معدّل انتشار حالات التعطُّل وسمات التشخيص لدى المستخدمين:

import { recordError, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase';

const crashlytics = getCrashlytics(app);

async function submitPaymentForm() {
  try {
    await api.processTransaction();
  } catch (error) {
    // Manually record handled exceptions with diagnostic context
    recordError(crashlytics, error, {
      userTier: 'Premium Gold',
      checkoutStage: 'BillingAddressVerification',
      transactionCode: 'tx_8412_err',
      retryAttempts: 2
    });
    showFallbackBanner(error);
  }
}

إضافة مفاتيح مخصّصة

تساعدك مفاتيح البيانات الوصفية المخصّصة في فهم حالة التطبيق المحدّدة أو سير عمل المستخدم الذي يؤدي إلى حدوث عطل.

يمكنك تسجيل أنشطة المستخدمين وحالات الجلسات وتفاصيل التشخيص مباشرةً كسمات مخصّصة تتألف من مفتاح وقيمة باستخدام مَعلمة البيانات الوصفية الاختيارية عند طلب recordError:

import { recordError, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase'; // Shared initialization script

const crashlytics = getCrashlytics(app);

// Pass custom key-value diagnostic metadata within recordError
recordError(crashlytics, error, {
  userTier: 'Premium Gold',
  checkoutStage: 'BillingAddressVerification',
  transactionCode: 'tx_8412_err',
  retryAttempts: 2,
  breadcrumb: 'User opened shopping cart',
  lastAction: 'Click Checkout Button'
});

يتم الاحتفاظ بهذه السمات المخصّصة في تقرير الاستثناءات وتظهر ضمن علامة التبويب المفاتيح في عرض المشاكل في لوحة بيانات Crashlytics.

فرض محو سجلّات القياس عن بُعد

بشكل تلقائي، يجمع محرّك القياس عن بُعد على الويب السجلّات في أجزاء من الذاكرة للحفاظ على عمر البطارية وأداء وحدة المعالجة المركزية وعرض النطاق الترددي للشبكة. ومع ذلك، بالنسبة إلى بيئات التنفيذ قصيرة الأجل، يجب تحميل السجلات مباشرةً قبل تدمير سياق التنفيذ.

يمكنك استخدام الأمر flush غير المتزامن لإرسال جميع الأخطاء في قائمة الانتظار إلى الخلفية على الفور:

import { recordError, flush, getCrashlytics } from '@firebase/crashlytics';
import { app } from './lib/firebase';

const crashlytics = getCrashlytics(app);

async function handleApplicationCrash(error: Error) {
  // Capture the error with immediate priority
  recordError(crashlytics, error, { priority: 'IMMEDIATE' });

  // Force an immediate upload before the process terminates or reloads
  await flush(crashlytics);

  // Safe to terminate or refresh the current execution context
  window.location.reload();
}

ضبط معدّل البيانات في الملف الصوتي

إذا كنت تأخذ عيّنة من نسبة جلسات المستخدمين للتحكّم في حجم بيانات القياس عن بُعد وتكلفتها، يمكنك ضبط أخذ العينات باستخدام أي من الخيارات التالية:

الخيار 1 (يُنصح به): ضبط معدّل البيانات في الملف الصوتي في وحدة تحكّم "Firebase"

  1. في وحدة تحكّم Firebase، انتقِل إلى عمليات التطوير والتفاعل > لوحة بيانات Crashlytics.

  2. اختَر تطبيق الويب من القائمة المنسدلة في أعلى الصفحة.

  3. انقر على ضبط العيّنات في أعلى يسار لوحة البيانات.

  4. اضبط النسبة المئوية لمعدّل البيانات في الملف الصوتي (بين 0% و100%) للتحكّم في النسبة المئوية للأحداث والجلسات التي يتم جمعها من العملاء.

الخيار 2: ضبط معدّل البيانات في الملف الصوتي باستخدام Firebase Telemetry Admin API

يمكنك استخدام Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha) لإدارة إعدادات جمع بيانات القياس عن بُعد لتطبيقات Firebase.

  1. اضبط المتغيّرات المطلوبة التالية في الوحدة الطرفية:

    PROJECT_ID="PROJECT_ID"
    LOCATION="LOCATION"  # for example, global
    APP_ID="FIREBASE_APP_ID"  # for example, 1:1234567890:web:abcdef123456
    TOKEN=$(gcloud auth application-default print-access-token)
    
  2. ابحث عن CONFIG_NAME ثم اضبطه كمتغيّر في الوحدة الطرفية:

    تتم إدارة إعدادات القياس عن بُعد باستخدام مورد Config، لذا عليك العثور على CONFIG_NAME المحدّد لتطبيق الويب.

    1. يمكنك عرض قائمة بالإعدادات في مشروعك وفلترتها حسب FIREBASE_APP_ID. تضمن علامتَا curl -G و--data-urlencode ترميز سلسلة فلتر AIP-160 بشكل صحيح في عنوان URL:

      curl -G \
        -H "Authorization: Bearer $TOKEN" \
        --data-urlencode "filter=app_id=\"${APP_ID}\"" \
        "https://firebasetelemetryadmin.googleapis.com/v1alpha/projects/${PROJECT_ID}/locations/${LOCATION}/configs"
      
    2. في استجابة JSON، ابحث عن حقل name لتطبيقك (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>)، ثم اضبطه كمتغيّر CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      
  3. اضبط معدّل البيانات في الملف الصوتي:

    لضبط معدّل البيانات في الملف الصوتي، استخدِم طريقة PATCH لتعديل حقل sampling_rate. يجب تحديد updateMask=sampling_rate في معلمات طلب البحث. معدّل البيانات في الملف الصوتي هو قيمة مزدوجة تمثّل النسبة المئوية للجلسات التي يتم جمعها (على سبيل المثال، 0.25 لنسبة %25):

    # Example: Set sampling rate to 25%
    curl -X PATCH \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d "{
        \"sampling_rate\": 0.25,
        \"app_id\": \"${APP_ID}\"
      }" \
      "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}?updateMask=sampling_rate"
    

إيقاف جمع بيانات القياس عن بُعد أو تفعيله

يتم تلقائيًا تفعيل جمع بيانات القياس عن بُعد عند إعداد Crashlytics لتطبيق الويب. إذا كنت بحاجة إلى إيقاف جمع بيانات القياس عن بُعد أو إعادة تفعيله بشكل ديناميكي بعد تثبيت حزمة تطوير البرامج (SDK) لـ Crashlytics، يمكنك إدارة نقاط نهاية جمع البيانات باستخدام واجهة برمجة التطبيقات Firebase Telemetry Admin API (firebasetelemetryadmin.googleapis.com/v1alpha).

قبل أن تتمكّن من إيقاف القياس عن بُعد أو تفعيله، عليك ضبط المتغيّرات التالية:

  1. اضبط المتغيّرات المطلوبة التالية في الوحدة الطرفية:

    PROJECT_ID="PROJECT_ID"
    LOCATION="LOCATION"  # for example, global
    APP_ID="FIREBASE_APP_ID"  # for example, 1:1234567890:web:abcdef123456
    TOKEN=$(gcloud auth application-default print-access-token)
    
  2. ابحث عن CONFIG_NAME ثم اضبطه كمتغيّر في الوحدة الطرفية:

    تتم إدارة إعدادات القياس عن بُعد باستخدام مورد Config، لذا عليك العثور على CONFIG_NAME المحدّد لتطبيق الويب.

    1. يمكنك عرض قائمة بالإعدادات في مشروعك وفلترتها حسب FIREBASE_APP_ID. تضمن علامتَا curl -G و--data-urlencode ترميز سلسلة فلتر AIP-160 بشكل صحيح في عنوان URL:

      curl -G \
        -H "Authorization: Bearer $TOKEN" \
        --data-urlencode "filter=app_id=\"${APP_ID}\"" \
        "https://firebasetelemetryadmin.googleapis.com/v1alpha/projects/${PROJECT_ID}/locations/${LOCATION}/configs"
      
    2. في استجابة JSON، ابحث عن حقل name لتطبيقك (projects/PROJECT_ID/locations/LOCATION/configs/<CONFIG_ID>)، ثم اضبطه كمتغيّر CONFIG_NAME:

      CONFIG_NAME="CONFIG_NAME"
      

إيقاف جمع بيانات القياس عن بُعد

استخدِم الطريقة المخصّصة :disable لإيقاف جمع بيانات القياس عن بُعد:

curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}' \
  "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}:disable"

إعادة تفعيل جمع بيانات القياس عن بُعد

لإعادة تفعيل جمع بيانات القياس عن بُعد، يمكنك استدعاء طريقة :enable:

curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}' \
  "https://firebasetelemetryadmin.googleapis.com/v1alpha/${CONFIG_NAME}:enable"