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

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

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

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

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

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

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

    1. בדף Crashlytics במסוף Firebase, לוחצים על Set Crashlytics.

    2. במסך שנפתח לוחצים על No > Set up a Firebase app new.

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

    project/build.gradle

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

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

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

הנה דוגמה להוספת לחצן קריסה בשיטה onCreate() של Activity:

הפעילות הראשית (מוחרג)

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 AdManagerAdRequest.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(AdManagerAdRequest.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, יוצרים ומפעילים את האפליקציה באמולטור או במכשיר מחובר. לאחר טעינת האפליקציה, אפשר ללחוץ על הלחצן קריסות. כדי להעלות את יומן הקריסה ל-Crashlyics, צריך להפעיל מחדש את האפליקציה מהמכשיר או מ-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 AdManagerAdRequest.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(AdManagerAdRequest.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. הערה: חלק מהמפתחות יכולים להופיע במרכז השליטה תוך שעה.