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
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.
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.
Na página do Crashlytics no console do Firebase, clique em Configurar o Crashlytics.
Na tela que aparece, clique em Não > Configurar um novo app do Firebase.
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() // ... } }
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.