Firebase Crashlytics è un reporter sugli arresti anomali in tempo reale leggero che semplifica la gestione dei problemi di stabilità nella tua app. Crashlytics ti consente di risparmiare tempo per la risoluzione dei problemi raggruppando in modo intelligente gli arresti anomali ed evidenziando le circostanze che li causano.
Questa guida descrive come integrare Crashlytics nel progetto Xcode in modo da registrare gli ID risposta di annuncio. In seguito, quando risolvi i problemi relativi agli arresti anomali nella tua app, puoi cercare l'ID risposta annuncio e utilizzare il Centro revisione annunci in AdMob per trovare e bloccare gli annunci.
Passaggio 1: aggiungi Firebase a un'applicazione iOS
Se vuoi provare a eseguire il logging con Firebase da un'app pulita, puoi scaricare o clonare gli esempi di SDK Google Mobile Ads per il repository iOS su GitHub. Questa guida utilizza in particolare Esempio di banner.
Se hai già un'app, dovresti essere in grado di procedere ad altri passaggi con l'ID pacchetto dell'app. Gli stessi passaggi possono essere applicati anche ad altri esempi nel repository con adattamenti minori.
Per utilizzare Firebase Crashlytics, devi creare un progetto Firebase e aggiungervi la tua app. Se non l'hai ancora fatto, crea un progetto Firebase. Assicurati di registrare la tua app.
Nella pagina Crashlytics della Console Firebase, fai clic su Configura Crashlytics.
Nella schermata visualizzata, fai clic su No > Configura una nuova app Firebase.
Nel podfile, aggiungi i pod per Google Analytics e 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
Nel terminale o in un prompt dei comandi, installa e aggiorna i tuoi pod:
pod install --repo-update
Apri il file
BannerExample.xcworkspace
per Xcode per caricare il progetto.
Passaggio 2: configura Firebase per la tua app
Swift
In AppDelegate.swift
, aggiungi le seguenti righe:
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
In AppDelegate.m
, aggiungi le seguenti righe:
@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; }
In Xcode, apri Impostazioni build e fai clic sulla scheda Fasi di build. Aggiungi lo script esecuzione tessuto:
Pulisci la cartella della build, quindi crea ed esegui la tua app. Ora puoi accedere alla console web di Firebase e alla dashboard di Crashlytics.
(Facoltativo) Testa la configurazione
Se aggiungi un pulsante di arresto anomalo puoi forzare un arresto anomalo dell'app alla pressione di un pulsante. Questa configurazione di test attiverà il codice del passaggio 3 per inviare log personalizzati alle dashboard Firebase Crashlytic.
Swift
In ViewController.swift
aggiungi le seguenti righe alla funzione 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) }
Quindi, aggiungi questo @IBAction
in fondo alla dichiarazione del corso:
@IBAction func crashButtonTapped(_ sender: AnyObject) { fatalError("Test Crash Happened") }
Objective-C
In ViewController.m
aggiungi le seguenti righe al metodo 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]; }
Quindi, aggiungi questo IBAction
in fondo alla dichiarazione del corso:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
Nella barra degli strumenti di Xcode, premi il pulsante Interrompi, quindi riavvia l'app tramite un simulatore. Dopo aver caricato l'app, puoi fare clic sul pulsante Arresto anomalo. Torna su Xcode e fai clic sul pulsante Riproduci per caricare il log degli arresti anomali su Crashlytics.
Passaggio 3. Registra l'ID risposta all'annuncio
Se carichi più annunci e li mostri in momenti diversi, è consigliabile registrare ogni ID risposta annuncio con una chiave distinta. Ad esempio, questa guida utilizza un
esempio con un solo annuncio banner. Pertanto, l'ID risposta annuncio viene registrato come chiave banner_ad_response_id
nello snippet riportato di seguito.
Inoltre, puoi creare più coppie chiave / valore personalizzate in Firebase Crashlytics per tipi di annuncio ed eventi annuncio diversi. Fai riferimento alle notifiche del ciclo di vita delle richieste di annunci per
Per ulteriori informazioni sul logging personalizzato, consulta Personalizzare i report sugli arresti anomali di Firebase Crashlytics.
Swift
Aggiungi il seguente codice a ViewController.swift
. Essenzialmente, utilizza la funzione Crashlytics.setCustomValue()
nella funzione di callback di 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
Aggiungi il seguente codice a ViewController.m
. Essenzialmente, utilizza la funzione
[FIRCrashlytics crashlytics]
setCustomValue
nella funzione 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
Complimenti! Ora vedrai l'evento adResponseId
più recente nella sezione principale delle sessioni con arresti anomali della dashboard di Crashlytics. Tieni presente che la visualizzazione di alcune chiavi nella dashboard può richiedere fino a un'ora.