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. Ele poupa tempo de solução de problemas agrupando de maneira inteligente as falhas e destacando as 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 do anúncio. Mais tarde, ao resolver problemas no seu aplicativo, você poderá pesquisar o ID da resposta do anúncio e usar a Central de revisão de anúncios na Ad Manager para encontrar e bloquear os anúncios.
Etapa 1: adicionar o Firebase a um aplicativo Android
Se você quiser testar a geração de registros com o Firebase em um app limpo, faça o download ou clone os exemplos do SDK dos anúncios para dispositivos móveis do Google para o repositório do Android no GitHub. Neste guia, usamos especificamente o Exemplo de banner do Exemplo de banner.
Se você já tiver um app, poderá prosseguir para outras etapas com o nome do pacote do app. As mesmas etapas também podem ser aplicadas a outros exemplos no repositório com pequenas adaptações.
Para usar o Firebase Crashlytics, crie um projeto do Firebase e adicione seu app a ele. Crie um projeto do Firebase, caso ainda não tenha feito isso. Registre seu app nele.
Na página do Crashlytics do Console do Firebase, clique em Configurar Crashlytics.
Na tela exibida, clique em Não > Configurar um novo app do Firebase.
No build.gradle, adicione as dependências do Google Analytics, Fabric e 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' }
projeto/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() // ... } }
Crie e execute seu app para garantir que o Crashlytics esteja configurado corretamente. Depois disso, você poderá acessar o painel do Crashlytics.
(Opcional): Testar a configuração
Ao adicionar um botão de falha, é possível forçar a ocorrência de uma falha no app ao pressionar cada botão.
Veja um exemplo que mostra como adicionar um botão de falha no 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 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)) }
No Android Studio, crie e execute o app em um emulador ou dispositivo conectado. Depois que o app for carregado, clique no botão Crash. Reinicie o app no dispositivo ou no Android Studio para que o registro de falhas seja enviado ao Crashlyics.
Etapa 2: registre o ID de resposta do anúncio
Se você carregar vários anúncios e exibi-los em momentos diferentes, é recomendável registrar cada código de resposta do anúncio com uma chave separada. Por exemplo, este guia usa um exemplo que tem apenas um anúncio de banner. Por isso, registramos o ID da resposta do anúncio como a chave banner_ad_response_id
no snippet a seguir. Na verdade, é possível criar
vários pares personalizados de chave-valor no Firebase Crashlytics para diferentes tipos
e eventos de anúncio. Consulte
AdListener
para
ver o ciclo de vida do anúncio. Acesse Personalizar relatórios de erros do Firebase Crashlytics para mais informações sobre a geração de registros personalizada.
Adicione o seguinte código ao seu MyActivity.java
. Essencialmente, ele usa a função
FirebaseCrashlytics.setCustomKey()
na função de callback onAdLoaded()
para garantir que o anúncio tenha
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 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)) }
Parabéns! Agora, você verá o banner_ad_response_id
mais recente na seção principal das sessões de falha no painel do Crashlytics. Algumas chaves podem levar até uma hora para ficarem visíveis no painel.