Como registrar o ID da resposta do anúncio com o Firebase Crashlytics

Selecione a plataforma: Android iOS Unity

O Firebase Crashlytics é uma ferramenta de relatório de falhas leve e em tempo real que facilita o gerenciamento de problemas de estabilidade no seu app. O Crashlytics economiza tempo na solução de problemas com o agrupamento inteligente das falhas e a exibição das circunstâncias que levam a elas.

Este guia descreve como integrar o Crashlytics ao seu projeto do Android Studio para que você possa registrar IDs de resposta de anúncio. Depois, ao resolver problemas de falhas no seu app, você pode pesquisar o ID de resposta do anúncio e usar a Central de revisão de anúncios na AdMob para encontrar e bloquear os anúncios.

Etapa 1:adicionar o Firebase a um aplicativo Android

  1. Se você quiser testar o registro em log com o Firebase em um app limpo, faça o download ou clone o repositório de exemplos do SDK dos anúncios para dispositivos móveis do Google para Android no GitHub. Este guia usa especificamente o Exemplo de banner.

    Se você já tiver um app, poderá seguir para outras etapas com o nome do pacote dele. As mesmas etapas também podem ser aplicadas a outros exemplos no repositório com pequenas adaptações.

  2. Para usar o Firebase Crashlytics, crie um projeto do Firebase e adicione seu app a ele. Se você ainda não tiver um projeto do Firebase, crie um. Registre seu app nele.

    1. Na página do Crashlytics no console do Firebase, clique em Configurar o Crashlytics.

    2. Na tela que aparece, clique em Não > Configurar um novo app do Firebase.

  3. No build.gradle, adicione as dependências do Google Analytics, do Fabric e do 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:24.4.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:20.0.0'
    }

    project/build.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.5'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
  4. Crie e execute o app para garantir que o Crashlytics esteja configurado corretamente. Depois disso, você poderá acessar o painel do Crashlytics.

(Opcional): testar sua configuração

Ao adicionar um botão de falha é possível forçar uma falha para causar um erro no app a cada vez que o botão é pressionado.

Confira um exemplo que mostra como adicionar um botão de falha ao método onCreate() de um Activity:

MainActivity (trecho)

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

No Android Studio, crie e execute o app em um emulador ou dispositivo conectado. Depois que o app for carregado, clique no botão Falha. Reinicie o app no dispositivo ou no Android Studio para que o registro de falha seja enviado ao Crashlyics.

Etapa 2:registrar o ID da resposta do anúncio

Se você carregar vários anúncios e mostrá-los em momentos diferentes, é recomendável registrar cada ID de resposta de anúncio com uma chave separada. Por exemplo, este guia usa um exemplo com apenas um anúncio de banner. Portanto, registramos o ID da resposta do anúncio como a chave banner_ad_response_id no snippet a seguir. É possível criar vários pares de chave-valor personalizados no Firebase Crashlytics para diferentes tipos de anúncios e eventos de publicidade. Consulte AdListener para saber mais sobre o ciclo de vida dos anúncios. Acesse Personalizar relatórios de erros do Firebase Crashlytics para mais informações sobre o registro personalizado.

Adicione o seguinte código ao MyActivity.java: Basicamente, ele usa a função FirebaseCrashlytics.setCustomKey() na função de callback onAdLoaded() para garantir que o anúncio tenha sido carregado antes de tentar chamar 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))
}

Parabéns! Agora você vai ver o banner_ad_response_id mais recente na seção de chaves das sessões de falha no painel do Crashlytics. Algumas chaves podem levar até uma hora para aparecer no painel.