רישום ביומן של מזהה התגובה למודעה באמצעות Firebase Crashlytics

בחירת פלטפורמה: Android iOS Unity

Firebase Crashlytics הוא כלי קל משקל לדיווח על קריסות בזמן אמת, שמאפשר לכם לנהל בקלות בעיות יציבות באפליקציה. Crashlytics חוסך לכם זמן בפתרון בעיות, כי הוא מקבץ קריסות בצורה חכמה ומדגיש את הנסיבות שהובילו אליהן.

במדריך הזה מוסבר איך לשלב את Crashlytics בפרויקט Android Studio כדי שתוכלו לרשום מזהי תגובה למודעות. בהמשך, כשמנסים לפתור בעיות שגורמות לקריסות באפליקציה, אפשר לחפש את המזהה של תגובת המודעה ולהשתמש במרכז בקרת המודעות ב-AdMob כדי למצוא ולחסום את המודעות.

שלב 1: הוספת Firebase לאפליקציית Android

  1. אם רוצים לנסות רישום באמצעות Firebase מאפליקציה חדשה, אפשר להוריד או לשכפל את הדוגמאות של Google Mobile Ads SDK ל-Android ממאגר ב-GitHub. במדריך הזה נעשה שימוש ספציפי בדוגמה של באנר.

    אם כבר יש לכם אפליקציה, תוכלו להמשיך לשלבים אחרים עם שם החבילה של האפליקציה. אפשר להשתמש באותם שלבים גם בדוגמאות אחרות במאגר, עם שינויים קלים.

  2. כדי להשתמש ב-Firebase Crashlytics, צריך ליצור פרויקט ב-Firebase ולהוסיף אליו את האפליקציה. אם עדיין לא עשיתם זאת, צרו פרויקט Firebase. חשוב לרשום את האפליקציה ב-Azure AD.

    1. בדף Crashlytics במסוף Firebase, לוחצים על הגדרה של Crashlytics.

    2. במסך שמופיע, לוחצים על לא > הגדרת אפליקציית Firebase חדשה.

  3. ב-build.gradle, מוסיפים את יחסי התלות של Google Analytics,‏ Fabric ו-Crashlytics.

    app/build.gradle

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    // Add the Fabric plugin
    apply plugin: 'io.fabric'
    
    dependencies {
        // ...
    
        // Add the Google Mobile Ads SDK
        implementation 'com.google.android.gms:play-services-ads:24.5.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:20.0.1'
    }

    project/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.4.3'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.6'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
  4. מבצעים Build ומריצים את האפליקציה כדי לוודא ש-Crashlytics מוגדר בצורה נכונה. אחרי שתשלימו את התהליך, תוכלו לגשת ללוח הבקרה של Crashlytics.

(אופציונלי): בדיקת ההגדרה

הוספת לחצן לקריסת האפליקציה מאפשרת לגרום לקריסת האפליקציה בכל לחיצה על הלחצן.

הדוגמה הבאה מראה איך להוסיף לחצן קריסה בשיטה onCreate() של Activity:

MainActivity (קטע)

Java

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view);

  // Start loading the ad in the background.
  adView.loadAd(new AdRequest.Builder().build());

  // Add a crash button.
  Button crashButton = new Button(this);
  crashButton.setText("Crash!");
  crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
      throw new RuntimeException("Test Crash"); // Force a crash
    }
  });

  addContentView(crashButton, new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT));
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_my)

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view)

  // Start loading the ad in the background.
  adView.loadAd(AdRequest.Builder().build())

  // Add a crash button.
  val crashButton = Button(this)
  crashButton.text = "Crash!"
  crashButton.setOnClickListener {
    throw RuntimeException("Test Crash") // Force a crash
  }

  addContentView(crashButton, ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT))
}

ב-Android Studio, בונים את האפליקציה ומריצים אותה באמולטור או במכשיר מחובר. אחרי שהאפליקציה נטענת, אפשר ללחוץ על הלחצן קריסה. מפעילים מחדש את האפליקציה מהמכשיר או מ-Android Studio כדי שיומן הקריסות יועלה ל-Crashlytics.

שלב 2: רישום מזהה התגובה למודעה

אם טוענים כמה מודעות ומציגים אותן בזמנים שונים, מומלץ לרשום ביומן את מזהה התגובה של כל מודעה באמצעות מפתח נפרד. לדוגמה, במדריך הזה נעשה שימוש בדוגמה שכוללת רק מודעת באנר אחת. לכן, אנחנו מתעדים את מזהה תגובת המודעה כמפתח banner_ad_response_id בקטע הקוד הבא. אפשר ליצור כמה צמדים מותאמים אישית של מפתח / ערך ב-Firebase Crashlytics לסוגים שונים של מודעות ולאירועים שקשורים למודעות (ראו AdListener לגבי מחזור החיים של מודעה). במאמר התאמה אישית של דוחות קריסה ב-Firebase Crashlytics אפשר לקרוא מידע נוסף על רישום ביומן בהתאמה אישית.

מוסיפים את הקוד הבא לקובץ MyActivity.java. הפונקציה FirebaseCrashlytics.setCustomKey() משמשת בפונקציית הקריאה החוזרת onAdLoaded() כדי לוודא שהמודעה נטענה לפני שמנסים לקרוא לפונקציה getResponseInfo().

Java

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view);

  adView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
      String adResponseId = adView.getResponseInfo().getResponseId();
      FirebaseCrashlytics.getInstance().setCustomKey(
          "banner_ad_response_id", adResponseId);
    }
  });

  // Start loading the ad in the background.
  adView.loadAd(new AdRequest.Builder().build());

  // Add a crash button.
  Button crashButton = new Button(this);
  crashButton.setText("Crash!");
  crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
      throw new RuntimeException("Test Crash"); // Force a crash
    }
  });

  addContentView(crashButton, new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT));
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_my)

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view)

  adView.adListener = object : AdListener() {
    override fun onAdLoaded() {
      mAdView.responseInfo?.responseId?.let { adResponseId ->
          FirebaseCrashlytics.getInstance().setCustomKey(
              "banner_ad_response_id", adResponseId)
      }
    }
  }

  // Start loading the ad in the background.
  adView.loadAd(AdRequest.Builder().build())

  // Add a crash button.
  val crashButton = Button(this)
  crashButton.text = "Crash!"
  crashButton.setOnClickListener {
    throw RuntimeException("Test Crash") // Force a crash
  }

  addContentView(crashButton, ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT))
}

מעולה! עכשיו תוכלו לראות את banner_ad_response_id העדכונים האחרונים בקטע המרכזי של הפעלות שגרמו לקריסה במרכז הבקרה של Crashlytics. שימו לב: יכול להיות שיעבור עד שעה עד שמפתחות מסוימים יופיעו בלוח הבקרה.