Firebase Crashlytics es un generador de informes de fallas ligero y en tiempo real que te permite gestionar los problemas de estabilidad de tu app con facilidad. Crashlytics te ahorra tiempo en la solución de problemas, ya que agrupa las fallas de forma inteligente y destaca las circunstancias que las generan.
En esta guía, se describe cómo integrar Crashlytics en tu proyecto de Xcode para que puedas registrar los IDs de respuesta de anuncios. Luego, cuando soluciones los problemas de fallas en tu app, puedes buscar el ID de respuesta de anuncios y usar el Centro de revisión de anuncios en AdMob para encontrar y bloquear los anuncios.
Paso 1: Agrega Firebase a una aplicación para iOS
Si quieres probar el acceso con Firebase desde una app sin modificaciones, puedes descargar o clonar los ejemplos del repositorio del SDK de anuncios de Google para dispositivos móviles para iOS en GitHub. En esta guía, se usa específicamente el ejemplo de banner de.
Si ya tienes una app, deberías poder continuar con los demás pasos con el ID del paquete de la app. Los mismos pasos también se pueden aplicar a otros ejemplos del repositorio con pequeñas adaptaciones.
Para usar Firebase Crashlytics, debes crear un proyecto de Firebase y añadirle tu app. Si aún no lo hiciste, crea un proyecto de Firebase. Asegúrate de registrar tu app en ella.
En la página de Crashlytics de Firebase console, haz clic en Configurar Crashlytics.
En la pantalla que aparece, haz clic en No > Set up a new Firebase app.
En el Podfile, agrega los pods de Google Analytics y Firebase Crashlytics.
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' target 'BannerExample' do use_frameworks! pod 'Google-Mobile-Ads-SDK' pod 'Firebase/Crashlytics' pod 'Firebase/Analytics' end
En la terminal o un símbolo del sistema, instala y actualiza tus Pods:
pod install --repo-update
Abre el archivo
BannerExample.xcworkspace
para que Xcode cargue el proyecto.
Paso 2: Configura Firebase para tu app
Swift
En tu AppDelegate.swift
, agrega las siguientes líneas:
import UIKit // Import the Firebase library import FirebaseCore @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Configure an instance of Firebase FirebaseApp.configure() return true } }
Objective-C
En tu AppDelegate.m
, agrega las siguientes líneas:
@import AppDelegate.h; // Import the Firebase library @import FirebaseCore; @interface AppDelegate () @end @implementation AppDelegate ‐ (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Initialize Firebase [FIRApp configure]; return YES; }
En Xcode, abre Build Settings y haz clic en la pestaña Build Phases. Agrega la secuencia de comandos de ejecución de Fabric:
Limpia la carpeta de compilación y, luego, compila y ejecuta la app. Ahora puedes acceder a la consola web de Firebase y al panel de Crashlytics.
(Opcional): Prueba tu configuración
Si agregas un botón de falla, puedes forzar una falla para que una app falle con cada vez que se presiona un botón. Esta configuración de prueba activará el código del paso 3 para enviar registros personalizados a los paneles de Firebase Crashlytics.
Swift
En tu ViewController.swift
, agrega las siguientes líneas a la función viewDidLoad()
:
override func viewDidLoad() { super.viewDidLoad() print("Google Mobile Ads SDK version: \(GADRequest.sdkVersion())") bannerView.delegate = self bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716" bannerView.rootViewController = self bannerView.load(GADRequest()) let button = UIButton(type: .roundedRect) button.frame = CGRect(x: 20, y: 50, width: 100, height: 30) button.setTitle("Crash", for: []) button.addTarget(self, action: #selector(self.crashButtonTapped(_:)), for: .touchUpInside) view.addSubview(button) }
Luego, agrega este @IBAction
a la parte inferior de la declaración de la clase:
@IBAction func crashButtonTapped(_ sender: AnyObject) { fatalError("Test Crash Happened") }
Objective-C
En tu ViewController.m
, agrega las siguientes líneas al método viewDidLoad
:
‐ (void)viewDidLoad { [super viewDidLoad]; /// ... UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(20, 50, 100, 30); [button setTitle:@"Crash" forState:UIControlStateNormal]; [button addTarget:self action:@selector(crashButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; }
Luego, agrega este IBAction
a la parte inferior de la declaración de la clase:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
En la barra de herramientas de Xcode, presiona el botón Stop y, luego, reinicia la app a través de un simulador. Después de cargar la app, puedes hacer clic en el botón Crash. Regresa a Xcode y haz clic en el botón Play para que el registro de fallas se cargue a Crashlytics.
Paso 3: Registra el ID de respuesta del anuncio
Si cargas varios anuncios y los muestras en diferentes momentos, es conveniente registrar cada ID de respuesta de anuncio con una clave independiente. Por ejemplo, en esta guía, se usa un ejemplo que solo tiene un anuncio de banner. Por lo tanto, registramos el ID de respuesta del anuncio como la clave banner_ad_response_id
en el siguiente fragmento.
También puedes crear varios pares clave-valor personalizados en Firebase Crashlytics para diferentes tipos y eventos de anuncios. Consulta las notificaciones del ciclo de vida de las solicitudes de anuncios para lo siguiente:
Consulta Personaliza los informes de fallas de Firebase Crashlytics para obtener más información sobre el registro personalizado.
Swift
Agrega el siguiente código a tu ViewController.swift
. En esencia, usa la función Crashlytics.setCustomValue()
en la función de devolución de llamada adViewDidReceiveAd
.
import GoogleMobileAds import UIKit class ViewController: UIViewController, GADBannerViewDelegate { /// The banner view. @IBOutlet weak var bannerView: GADBannerView! override func viewDidLoad() { super.viewDidLoad() ... bannerView.delegate = self ... } /// Tells the delegate an ad request loaded an ad. func adViewDidReceiveAd(_ bannerView: GADBannerView) { if let responseInfo = bannerView.responseInfo, responseId = responseInfo.responseId { print("adViewDidReceiveAd from network: \(responseInfo.adNetworkClassName), response Id='\(responseId)'") Crashlytics.sharedInstance().setCustomValue(responseId, forKey: "banner_ad_response_id") } } }
Objective-C
Agrega el siguiente código a tu ViewController.m
. Básicamente, usa la función [FIRCrashlytics crashlytics]
setCustomValue
en la función adViewDidReceiveAd
.
@import GoogleMobileAds; @interface ViewController () @property(nonatomic, strong) GADBannerView *bannerView; @end @implementation ViewController ‐ (void)viewDidLoad { [super viewDidLoad]; // In this case, we instantiate the banner with desired ad size. self.bannerView = [[GADBannerView alloc] initWithAdSize:GADAdSizeBanner]; [self addBannerViewToView:self.bannerView]; } ‐ (void)addBannerViewToView:(UIView *)bannerView { bannerView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:bannerView]; [self.view addConstraints:@[ [NSLayoutConstraint constraintWithItem:bannerView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.bottomLayoutGuide attribute:NSLayoutAttributeTop multiplier:1 constant:0], [NSLayoutConstraint constraintWithItem:bannerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view kattribute:NSLayoutAttributeCenterX multiplier:1 constant:0] ]]; } - (void)adViewDidReceiveAd:(GADBannerView *)bannerView { NSString *adResponseId = bannerView.responseInfo.responseId; if (adResponseId) { NSLog(@"adViewDidReceiveAd from network: %@ with response Id: %@", bannerView.responseInfo.adNetworkClassName, adResponseId); [[FIRCrashlytics crashlytics] setCustomValue:adResponseId forKey:@"banner_ad_response_id"]; } } @end
¡Felicitaciones! Ahora verás el adResponseId
más reciente en la sección de claves de las sesiones de fallas en el panel de Crashlytics. Ten en cuenta que algunas claves pueden tardar hasta una hora en aparecer en tu panel.