Регистрация идентификатора ответа объявления с помощью 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, если вы ещё этого не сделали. Не забудьте зарегистрировать в нём своё приложение .

    1. На странице Crashlytics консоли Firebase нажмите Настроить Crashlytics .

    2. На появившемся экране нажмите Нет > Настроить новое приложение Firebase .

  3. В файле build.gradle добавьте зависимости для Google Analytics, Fabric и Crashlytics.

    приложение/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'
    }

    проект/сборка.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. Соберите и запустите приложение, чтобы убедиться в правильности настройки Crashlytics. После успешной сборки вы получите доступ к панели управления Crashlytics.

(Необязательно): Проверьте свою настройку

Добавив кнопку сбоя, вы можете принудительно вызвать сбой, вызывая сбой приложения при каждом нажатии кнопки.

Вот пример, показывающий, как добавить кнопку сбоя в метод onCreate() Activity :

MainActivity (отрывок)

Ява

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

Котлин

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, чтобы загрузить журнал сбоя в Crashlyics.

Шаг 2: Зарегистрируйте идентификатор ответа на объявление

Если вы загружаете несколько объявлений и показываете их в разное время, рекомендуется регистрировать каждый идентификатор ответа на объявление с отдельным ключом. Например, в этом руководстве используется пример с одним баннером. Поэтому в следующем фрагменте кода мы регистрируем идентификатор ответа на объявление как ключ banner_ad_response_id . Действительно, в Firebase Crashlytics можно создать несколько пар «ключ-значение» для разных типов объявлений и событий (см. AdListener , чтобы узнать о жизненном цикле объявления). Подробнее о настраиваемом ведении журнала см. в статье «Настройка отчётов о сбоях Firebase Crashlytics» .

Добавьте следующий код в файл MyActivity.java . По сути, он использует функцию FirebaseCrashlytics.setCustomKey() в функции обратного вызова onAdLoaded() чтобы убедиться, что реклама загружена, прежде чем пытаться вызвать getResponseInfo() .

Ява

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

Котлин

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. Обратите внимание, что некоторые ключи могут появиться на панели управления в течение часа.