Firebase Crashlytics es una herramienta sencilla que genera informes sobre fallos en tiempo real, lo que te permite gestionar problemas de estabilidad en tu aplicación fácilmente. Gracias a esta solución, puedes ahorrar tiempo a la hora de solucionar problemas, ya que agrupa los fallos de manera inteligente y muestra las circunstancias que los han provocado.
En esta guía se explica cómo integrar Crashlytics en tu proyecto de Xcode para que puedas registrar los ID de respuesta a solicitudes de anuncios. Así, cuando vayas a solucionar fallos que se produzcan en tu aplicación, puedes buscar los ID de respuesta a solicitudes de anuncios para localizar y bloquear anuncios concretos en el centro de revisión de anuncios de AdMob .
Paso 1: Añadir Firebase a una aplicación iOS
Si quieres probar a generar registros con Firebase en una aplicación nueva, puedes descargar o clonar en GitHub el repositorio de ejemplos de iOS del SDK de anuncios de Google para móviles. Concretamente, en esta guía se utilizan ejemplos de anuncios de banner.
Si ya tienes una aplicación, probablemente puedas continuar con los pasos que quedan utilizando el ID de paquete de la aplicación. Puedes seguir estas instrucciones con otros ejemplos del repositorio adaptándolas ligeramente.
Para utilizar Firebase Crashlytics, deberás crear un proyecto de Firebase y añadir tu aplicación en él. Si aún no lo has hecho, crea el proyecto ahora y añádele tu aplicación.
En la página de Crashlytics de la consola de Firebase, haz clic en Configurar Crashlytics.
En la pantalla que aparece, haz clic en No > Configura una nueva aplicación de Firebase.
En el Podfile, añade 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
Usa el terminal o una petición de comando para instalar y actualizar los pods:
pod install --repo-update
Abre el archivo
BannerExample.xcworkspace
para que Xcode cargue el proyecto.
Paso 2: Configurar Firebase en la aplicación
Swift
En AppDelegate.swift
, añade 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 AppDelegate.m
, añade 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 (Configuración de compilación) y haz clic en la pestaña Build Phases (Fases de compilación). Añade la secuencia de comandos de ejecución de Fabric:
Limpia la carpeta de compilación y, a continuación, compila y ejecuta tu aplicación. Entonces, ya podrás iniciar sesión en la consola web de Firebase y acceder al panel de control de Crashlytics.
Probar la configuración (opcional)
Si añades un botón para forzar fallos, puedes provocar que se produzcan errores en la aplicación cada vez que lo pulses. Esta configuración de prueba activará el código del paso 3 para enviar registros personalizados a los paneles de control de Firebase Crashlytics.
Swift
En ViewController.swift
, añade 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, añade esta @IBAction
al final de la declaración de clase:
@IBAction func crashButtonTapped(_ sender: AnyObject) { fatalError("Test Crash Happened") }
Objective‑C
En ViewController.m
, añade 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, añade esta IBAction
al final de la declaración de clase:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
En la barra de herramientas de Xcode, pulsa el botón de parada y, a continuación, vuelve a ejecutar la aplicación desde un simulador. Cuando la aplicación se haya cargado, podrás usar el botón para forzar fallos. Vuelve a Xcode y haz clic en el botón de reproducción para que el registro de fallos se suba a Crashlytics.
Paso 3: Registrar el ID de respuesta a solicitud de anuncio
Si cargas varios anuncios y los muestras en distintos momentos, te puede resultar útil registrar cada ID de respuesta a solicitudes de anuncios con una clave distinta. En esta guía se muestra un ejemplo que solo incluye un anuncio de banner. Por lo tanto, registramos el ID de respuesta a las solicitudes de anuncios como la clave banner_ad_response_id
en el siguiente fragmento de código.
También puedes crear varios pares clave-valor personalizados en Firebase Crashlytics para distintos tipos y eventos de anuncios. Consulta las notificaciones del ciclo de vida de las solicitudes de anuncios sobre los siguientes elementos:
Visita cómo personalizar informes sobre fallos de Firebase Crashlytics para obtener más información sobre los registros personalizados.
Swift
En tu archivo ViewController.swift
, añade el código que se indica a continuación. Básicamente, utiliza la función Crashlytics.setCustomValue()
en la función de retrollamada 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
En tu archivo ViewController.m
, añade el código que se indica a continuación. Básicamente, utiliza 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
¡Enhorabuena! Ya puedes ver el adResponseId
más reciente. Para ello, accede al panel de control de Crashlytics y ve a la sección de claves de las sesiones de fallos. Ten en cuenta que algunas claves pueden tardar hasta una hora en aparecer en el panel de control.