Firebase Crashlytics ist ein unkomplizierter Echtzeit-Absturzbericht, mit dem Sie Stabilitätsprobleme in Ihrer App einfacher verwalten können. Crashlytics spart Ihnen Zeit bei der Fehlerbehebung, indem Abstürze intelligent gruppiert und die entsprechenden Umstände hervorgehoben werden.
In dieser Anleitung wird beschrieben, wie Sie Crashlytics in Ihr Xcode-Projekt einbinden, damit Sie Anzeigenantwort-IDs erfassen können. Wenn Sie später Probleme mit Abstürzen in Ihrer App beheben, können Sie die Anzeigenantwort-ID nachschlagen und die Anzeigen im Überprüfungszentrum für Anzeigen in AdMob suchen und blockieren.
Schritt 1: Firebase einer iOS-App hinzufügen
Wenn Sie die Protokollierung mit Firebase in einer neuen App ausprobieren möchten, können Sie die Beispiele für das Google Mobile Ads SDK für iOS aus dem Repository auf GitHub herunterladen oder klonen. In diesem Leitfaden wird das-Bannerbeispiel verwendet.
Wenn Sie bereits eine App haben, sollten Sie mit der Bundle-ID Ihrer App mit den nächsten Schritten fortfahren können. Dieselben 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, falls noch nicht geschehen. Sie müssen Ihre Anwendung dafür registrieren.
Klicken Sie auf der Crashlytics-Seite der Firebase Console 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 die Pods im Terminal oder an einer Eingabeaufforderung:
pod install --repo-update
Öffne 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 der Datei 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-Einstellungen und klicken Sie auf den Tab Build-Phasen. Fügen Sie das Fabric-Ausführungsskript hinzu:
Bereinigen Sie Ihren Build-Ordner, erstellen Sie Ihre App und führen Sie sie aus. Jetzt können Sie sich in der Firebase Web Console anmelden und auf das Crashlytics-Dashboard zugreifen.
Optional: Einrichtung testen
Wenn Sie eine Absturzschaltfläche hinzufügen, können Sie einen Absturz erzwingen, der bei jedem Drücken einer Schaltfläche zum Absturz der App führt. Durch diese Testeinrichtung wird der Code in Schritt 3 ausgelöst, um benutzerdefinierte Logs an Firebase Crashlytic-Dashboards zu senden.
Swift
Fügen Sie in ViewController.swift
der Funktion viewDidLoad()
die folgenden Zeilen hinzu:
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) }
Fügen Sie dann diese @IBAction
am Ende Ihrer Klassendeklaration hinzu:
@IBAction func crashButtonTapped(_ sender: AnyObject) { fatalError("Test Crash Happened") }
Objective-C
Fügen Sie in der Datei ViewController.m
der Methode viewDidLoad
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 diese IBAction
am Ende Ihrer Klassendeklaration hinzu:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
Klicken Sie in der Xcode-Symbolleiste auf die Schaltfläche Stopp 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 Crash-Log in Crashlytics hochgeladen wird.
Schritt 3: Anzeigenantwort-ID erfassen
Wenn Sie mehrere Anzeigen laden und zu unterschiedlichen Zeiten ausliefern, sollten Sie für jede Anzeigenantwort-ID einen separaten Schlüssel erfassen. In diesem Leitfaden wird beispielsweise ein Beispiel mit nur einer Banneranzeige verwendet. Daher loggen wir die Anzeigenantwort-ID im folgenden Snippet als Schlüssel banner_ad_response_id
.
Sie können in Firebase Crashlytics auch mehrere benutzerdefinierte Schlüssel/Wert-Paare für verschiedene Anzeigentypen und Anzeigenereignisse erstellen. Weitere Informationen finden Sie in den Benachrichtigungen zum Lebenszyklus von Anzeigenanfragen für:
Weitere Informationen zur benutzerdefinierten Protokollierung finden Sie unter Firebase Crashlytics-Absturzberichte anpassen.
Swift
Fügen Sie Ihrem ViewController.swift
den folgenden Code hinzu. Im Wesentlichen wird die Funktion Crashlytics.setCustomValue()
in der adViewDidReceiveAd
-Callback-Funktion verwendet.
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
Fügen Sie ViewController.m
den folgenden Code hinzu. Im Wesentlichen 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! Im Crashlytics-Dashboard wird jetzt im Schlüsselbereich der Absturzsitzungen die aktuelle adResponseId
angezeigt. Beachten Sie, dass es bis zu einer Stunde dauern kann, bis einige Schlüssel in Ihrem Dashboard sichtbar sind.