Регистрация идентификатора ответа на рекламу с помощью Firebase Crashlytics

Firebase Crashlytics — это легкий инструмент для создания отчетов о сбоях в реальном времени, который позволяет легко управлять проблемами стабильности в вашем приложении. Crashlytics экономит ваше время на устранение неполадок, интеллектуально группируя сбои и выделяя обстоятельства, которые к ним привели.

В этом руководстве описывается, как интегрировать Crashlytics в ваш проект Android Studio, чтобы вы могли регистрировать идентификаторы ответов на рекламу. Позже, когда вы будете устранять сбои в своем приложении, вы сможете найти идентификатор ответа на объявление и использовать Центр просмотра объявлений вМенеджер рекламы, чтобы найти и заблокировать рекламу.

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

    проект/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 :

Основная активность (отрывок)

Джава

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

Котлин

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 создайте и запустите свое приложение на эмуляторе или подключенном устройстве. После загрузки приложения вы можете нажать кнопку «Сбой» . Перезапустите приложение с устройства или 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 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));
}

Котлин

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