Firebase Crashlytics ist ein schlankes Tool, das Abstürze in Echtzeit meldet und Ihnen hilft, Stabilitätsprobleme in Ihrer App zu beheben. Crashlytics spart Ihnen Zeit bei der Fehlerbehebung, da Abstürze intelligent gruppiert und die Umstände, die zu ihnen führen, hervorgehoben werden.
In dieser Anleitung wird beschrieben, wie Sie Crashlytics in Ihr Xcode-Projekt einbinden, damit Sie Anzeigenantwort-IDs protokollieren können. Wenn Sie später Fehlerbehebungen für Abstürze in Ihrer App durchführen, können Sie die Anzeigenantwort-ID nachschlagen und das Überprüfungszentrum für Anzeigen in AdMob verwenden, um die Anzeigen zu finden und zu blockieren.
Schritt 1:Firebase zu einer iOS-App hinzufügen
Wenn Sie die Protokollierung mit Firebase in einer neuen App ausprobieren möchten, können Sie das Repository mit den Google Mobile Ads SDK-Beispielen für iOS auf GitHub herunterladen oder klonen. In diesem Leitfaden wird speziell das Bannerbeispiel verwendet.
Wenn Sie bereits eine App haben, sollten Sie mit der Bundle-ID Ihrer App mit den anderen Schritten fortfahren können. Die gleichen Schritte können mit geringfügigen Anpassungen auch auf andere Beispiele im Repository angewendet werden.
Wenn Sie Firebase Crashlytics verwenden möchten, müssen Sie ein Firebase-Projekt erstellen und Ihre App hinzufügen. Erstellen Sie ein Firebase-Projekt, wenn nicht bereits geschehen. Registrieren Sie Ihre App für diese.
Klicken Sie in der Firebase Console auf der Crashlytics-Seite auf Crashlytics einrichten.
Klicken Sie auf dem angezeigten Bildschirm auf Nein > Neue Firebase-App einrichten.
Fügen Sie im Podfile die Pods für Google Analytics und Firebase Crashlytics hinzu.
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
Installieren und aktualisieren Sie Ihre Pods im Terminal oder in der Eingabeaufforderung:
pod install --repo-update
Öffnen Sie die Datei
BannerExample.xcworkspace
, damit Xcode das Projekt laden kann.
Schritt 2:Firebase für Ihre App konfigurieren
Swift
Fügen Sie in AppDelegate.swift
die folgenden Zeilen hinzu:
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
Fügen Sie in AppDelegate.m
die folgenden Zeilen hinzu:
@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; }
Öffnen Sie in Xcode die Build Settings (Build-Einstellungen) und klicken Sie auf den Tab Build Phases (Build-Phasen). Fügen Sie das Fabric-Ausführungsskript hinzu:
Leeren Sie den Build-Ordner und erstellen und führen Sie dann Ihre App aus. Jetzt können Sie sich in der Firebase-Webkonsole anmelden und auf das Crashlytics-Dashboard zugreifen.
Optional: Einrichtung testen
Wenn Sie eine Absturztaste hinzufügen, können Sie einen Absturz erzwingen, indem Sie bei jedem Tastendruck einen App-Absturz verursachen. Mit dieser Testkonfiguration wird der Code in Schritt 3 ausgelöst, um benutzerdefinierte Logs an Firebase Crashlytics-Dashboards zu senden.
Swift
Fügen Sie in ViewController.swift
der Funktion viewDidLoad()
die folgenden Zeilen hinzu:
override func viewDidLoad() { super.viewDidLoad() bannerView.delegate = self bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716" bannerView.rootViewController = self bannerView.load(Request) 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) }
Fügen Sie dann dieses @IBAction
unten in Ihre Klassendeklaration ein:
@IBAction func crashButtonTapped(_ sender: AnyObject) { fatalError("Test Crash Happened") }
Objective-C
Fügen Sie in Ihrer ViewController.m
der viewDidLoad
-Methode die folgenden Zeilen hinzu:
‐ (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]; }
Fügen Sie dann dieses IBAction
unten in Ihre Klassendeklaration ein:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
Klicken Sie in der Xcode-Symbolleiste auf die Schaltfläche Stop (Beenden) und starten Sie die App dann über einen Simulator neu. Nachdem die App geladen wurde, können Sie auf die Schaltfläche Absturz klicken. Kehren Sie zu Xcode zurück und klicken Sie auf die Schaltfläche Wiedergeben, damit das Absturzprotokoll in Crashlytics hochgeladen wird.
Schritt 3:Anzeigenantwort-ID protokollieren
Wenn Sie mehrere Anzeigen laden und zu unterschiedlichen Zeiten präsentieren, empfiehlt es sich, jede Anzeigenantwort-ID mit einem separaten Schlüssel zu protokollieren. In diesem Leitfaden wird beispielsweise ein Beispiel mit nur einer Banneranzeige verwendet. Daher protokollieren wir die Anzeigenantwort-ID als banner_ad_response_id
-Schlüssel im folgenden Snippet.
Sie können auch mehrere benutzerdefinierte Schlüssel / Wert-Paare in Firebase Crashlytics für verschiedene Anzeigentypen und Anzeigenereignisse erstellen. Weitere Informationen finden Sie in den Benachrichtigungen zum Lebenszyklus von Anzeigenanfragen.
Weitere Informationen zum benutzerdefinierten Logging finden Sie unter Absturzberichte in Firebase Crashlytics anpassen.
Swift
Fügen Sie Ihrer ViewController.swift
den folgenden Code hinzu. Dazu wird die Funktion Crashlytics.setCustomValue()
in der adViewDidReceiveAd
-Callback-Funktion verwendet.
import GoogleMobileAds import UIKit class ViewController: UIViewController, BannerViewDelegate { /// The banner view. @IBOutlet weak var bannerView: BannerView! override func viewDidLoad() { super.viewDidLoad() ... bannerView.delegate = self ... } /// Tells the delegate an ad request loaded an ad. func adViewDidReceiveAd(_ bannerView: BannerView) { 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
Fügen Sie Ihrer ViewController.m
den folgenden Code hinzu. Dabei wird die Funktion [FIRCrashlytics crashlytics]
setCustomValue
in der Funktion adViewDidReceiveAd
verwendet.
@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
Glückwunsch! Die neuesten adResponseId
werden jetzt im Schlüsselabschnitt von Absturzsitzungen in Ihrem Crashlytics-Dashboard angezeigt. Es kann bis zu einer Stunde dauern, bis einige Schlüssel in Ihrem Dashboard angezeigt werden.