Anzeigenantwort-ID mit Firebase Crashlytics protokollieren

Firebase Crashlytics ist ein schlanker Echtzeit-Absturzmelder, mit dem Sie Stabilitätsprobleme Ihrer Anwendung ganz einfach verwalten können. Crashlytics spart Ihnen Zeit bei der Fehlerbehebung, da Abstürze intelligent gruppiert und die entsprechenden Umstände hervorgehoben werden.

In diesem Leitfaden wird beschrieben, wie Sie Crashlytics in Ihr Xcode-Projekt einbinden, um Anzeigenantwort-IDs zu protokollieren. Wenn Sie später Probleme mit Abstürzen in Ihrer App beheben, können Sie die Anzeigenantwort-ID ermitteln und die Anzeigen im Überprüfungszentrum für Anzeigen in AdMob suchen und blockieren.

Schritt 1:Firebase einer iOS-Anwendung hinzufügen

  1. Wenn Sie das Logging mit Firebase von einer sauberen App aus ausprobieren möchten, können Sie die Google Mobile Ads SDK-Beispiele für iOS Repository auf GitHub herunterladen oder klonen. In diesem Leitfaden wird speziell das Bannerbeispiel verwendet.

    Wenn Sie bereits eine Anwendung haben, können Sie mit der Bundle-ID Ihrer Anwendung fortfahren. Die gleichen Schritte können mit geringfügigen Anpassungen auch auf andere Beispiele im Repository angewendet werden.

  2. 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. Registrieren Sie Ihre App dafür.

    1. Klicken Sie auf der Crashlytics-Seite der Firebase Console auf Crashlytics einrichten.

    2. Klicken Sie im angezeigten Bildschirm auf Nein > Neue Firebase-App einrichten.

  3. Fügen Sie in der Podfile-Datei 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
    
  4. Installieren und aktualisieren Sie die Pods im Terminal oder über eine Eingabeaufforderung:

    pod install --repo-update
    
  5. Öffnen Sie die Datei BannerExample.xcworkspace für Xcode, um das Projekt zu laden.

Schritt 2: Firebase für Ihre App konfigurieren

Swift

Fügen Sie in AppDelegate.swift die folgenden Zeilen ein:

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 ein:

@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 Seite Build Settings (Build-Einstellungen) und klicken Sie auf den Tab Build Phases (Build-Phasen). Fügen Sie das Fabric-Ausführungsskript hinzu:

Bereinigen Sie Ihren Build-Ordner. Erstellen Sie dann Ihre Anwendung und führen Sie sie aus. Sie können sich jetzt in der Firebase-Webkonsole anmelden und auf das Crashlytics-Dashboard zugreifen.

(Optional): Einrichtung testen

Mit dem Hinzufügen einer Absturzschaltfläche können Sie einen Absturz erzwingen, der bei jedem Tastendruck einen Absturz der App verursacht. Diese Testeinrichtung löst den Code in Schritt 3 aus, um benutzerdefinierte Logs an Firebase Crashlytic-Dashboards zu senden.

Swift

Fügen Sie in der ViewController.swift-Funktion die folgenden Zeilen zur Funktion viewDidLoad() 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 @IBAction am Ende Ihrer Klassendeklaration hinzu:

    @IBAction func crashButtonTapped(_ sender: AnyObject) {
        fatalError("Test Crash Happened")
    }

Objective-C

Fügen Sie der Methode ViewController.m in der Datei ViewController.m die folgenden Zeilen hinzu: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];
}

Fügen Sie dann IBAction am Ende Ihrer Klassendeklaration hinzu:

‐ (IBAction)crashButtonTapped:(id)sender {
    assert(NO);
}

Drücken Sie in der Xcode-Symbolleiste die Schaltfläche Stop 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 Play (Wiedergabe), um das Absturzprotokoll in Crashlytics hochzuladen.

Schritt 3: Anzeigenantwort-ID protokollieren

Wenn Sie mehrere Anzeigen laden und zu unterschiedlichen Zeiten ausliefern, 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 wird die Anzeigenantwort-ID im folgenden Snippet als banner_ad_response_id-Schlüssel protokolliert.

Sie können in Firebase Crashlytics auch mehrere benutzerdefinierte Schlüssel / Wert-Paare für verschiedene Anzeigentypen und Anzeigenereignisse erstellen. Sehen Sie sich die Benachrichtigungen zum Lebenszyklus von Anzeigenanfragen

Weitere Informationen zum benutzerdefinierten Logging finden Sie unter Firebase Crashlytics-Absturzberichte anpassen.

Swift

Fügen Sie Ihrer ViewController.swift den folgenden Code hinzu. Im Wesentlichen wird dafür die Funktion Crashlytics.setCustomValue() in der Callback-Funktion adViewDidReceiveAd 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 Ihrer 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! Auf dem Crashlytics-Dashboard wird jetzt im Schlüsselabschnitt der Absturzsitzungen der letzte adResponseId angezeigt. Beachten Sie, dass es bis zu einer Stunde dauern kann, bis einige Schlüssel in Ihrem Dashboard angezeigt werden.