Zapisywanie identyfikatora odpowiedzi reklamy za pomocą Crashlytics Firebase

Firebase Crashlytics to prosty, aktualizowany w czasie rzeczywistym raport o awariach, który ułatwia zarządzanie problemami ze stabilnością w aplikacji. Crashlytics pomaga oszczędzać czas dzięki inteligentnemu grupowaniu awarii i podświetlaniu okoliczności, które do nich prowadzą.

Z tego przewodnika dowiesz się, jak zintegrować Crashlytics z projektem w Android Studio, aby móc rejestrować identyfikatory reakcji na reklamy. Podczas rozwiązywania problemów w aplikacji możesz sprawdzać identyfikator reakcji na reklamę i korzystać z Centrum oceny reklam w usłudze usłudze Ad Manager , aby znajdować i blokować reklamy.

Krok 1. Dodaj Firebase do aplikacji na Androida

  1. Jeśli chcesz spróbować zarejestrować się w Firebase przy użyciu czystej aplikacji, możesz pobrać lub skopiować przykłady pakietu SDK do reklam mobilnych Google na Androida na GitHubie. W tym przewodniku wykorzystaliśmy Przykład banera.

    Jeśli masz już aplikację, powinno być możliwe przejście do innych kroków dotyczących nazwy pakietu aplikacji. Te same czynności można też zastosować do innych przykładów repozytorium po niewielkich adaptacjach.

  2. Aby korzystać z Firebase Crashlytics, musisz utworzyć projekt Firebase i dodać do niego swoją aplikację. Utwórz projekt Firebase, jeśli jeszcze go nie masz. Pamiętaj, aby zarejestrować aplikację.

    1. Na stronie Crashlytics w konsoli Firebase kliknij Skonfiguruj Crashlytics.

    2. Na ekranie, który się pojawi, kliknij Nie > Skonfiguruj nową aplikację Firebase.

  3. W pliku build.gradle dodaj zależności dotyczące Google Analytics, tkaniny i 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'
    }
    

    projekt/kompilacja.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. Przygotuj i uruchom aplikację, aby sprawdzić, czy Crashlytics jest prawidłowo skonfigurowany. Gdy to zrobisz, uzyskasz dostęp do panelu Crashlytics.

(Opcjonalnie) Testowanie konfiguracji

Dodaj przycisk awarii, aby wymusić awarię aplikacji przy każdym naciśnięciu przycisku.

Ten przykład pokazuje, jak dodać przycisk awarii w metodzie onCreate() karty Activity:

MainActivity (fragment)

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))
}

W Android Studio możesz utworzyć i uruchomić aplikację w emulatorze lub na połączonym urządzeniu. Po załadowaniu aplikacji możesz kliknąć przycisk Awaria. Uruchom ponownie aplikację z urządzenia lub Android Studio, aby przesłać dziennik awarii do Crashlyics.

Krok 2. Zapisz identyfikator odpowiedzi reklamy

Jeśli wczytasz wiele reklam i będziesz je wyświetlać w różnym czasie, warto zarejestrować każdy identyfikator reakcji na reklamę z osobnym kluczem. W tym przewodniku wykorzystamy na przykład tylko jeden baner reklamowy. Dlatego rejestrujemy identyfikator odpowiedzi na reklamę jako klucz banner_ad_response_id w poniższym fragmencie kodu. Możesz tworzyć wiele niestandardowych par klucz-wartość w Firebase Crashlytics dla różnych typów reklam i zdarzeń reklamowych (zobacz AdListener, aby dowiedzieć się więcej o cyklu życia reklamy). Więcej informacji o niestandardowym logowaniu znajdziesz w artykule Dostosowywanie raportów awarii Crashlytics.

Dodaj ten kod do urządzenia MyActivity.java. Zasadniczo używa on funkcji FirebaseCrashlytics.setCustomKey() w funkcji wywołania zwrotnego onAdLoaded(), aby zapewnić, że reklama zostanie wczytana przed próbą wywołania 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))
}

Gratulacje! W sekcji Najważniejsze sesje w panelu Crashlytics jest teraz widoczne ostatnie banner_ad_response_id. Pamiętaj, że niektóre klucze mogą być widoczne w panelu nawet po godzinie.