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

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

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

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

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

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

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

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

    2. במסך שמופיע, לוחצים על No (לא) > Set up a new Firebase app (הגדרת אפליקציית Firebase חדשה).

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

    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:23.5.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:19.2.1'
    }
    

    project/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.4.2'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
    
  4. צריך ליצור ולהפעיל את האפליקציה כדי לוודא ש-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, יוצרים ומריצים את האפליקציה במהדמ או במכשיר מחובר. אחרי שהאפליקציה נטענת, אפשר ללחוץ על הלחצן תאונה. כדי שהיומן של קריסה יועלה ל-Crashlytics, צריך להפעיל מחדש את האפליקציה מהמכשיר או מ-Android Studio.

שלב 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. הערה: יכול להיות שיחלפו עד שעה עד שמפתחות מסוימים יופיעו במרכז הבקרה.