Firebase Crashlytics to lekkie narzędzie do raportowania awarii w czasie rzeczywistym, które ułatwia zarządzanie problemami ze stabilnością aplikacji. Crashlytics pozwala zaoszczędzić czas na rozwiązywanie problemów, ponieważ inteligentnie grupowanie awarii i wyróżnia okoliczności, które do nich prowadzą.
Z tego przewodnika dowiesz się, jak zintegrować Crashlytics z projektem Xcode, by móc rejestrować identyfikatory odpowiedzi reklam. Później, podczas rozwiązywania problemów z awariami w aplikacji, możesz wyszukać identyfikator odpowiedzi na reklamę i skorzystać z Centrum oceny reklam w AdMob , aby znaleźć i zablokować reklamy.
Krok 1. Dodaj Firebase do aplikacji na iOS
Jeśli chcesz spróbować logowania się w Firebase z czystej aplikacji, możesz pobrać lub sklonować przykłady pakietu SDK reklam mobilnych Google na iOS w repozytorium na GitHub. W tym przewodniku używamy dokładnieprzykładu banera.
Jeśli masz już aplikację, możesz wykonać inne czynności, używając identyfikatora pakietu aplikacji. Te same czynności możesz też wykonać w przypadku innych przykładów w repozytorium, stosując drobne zmiany.
Aby korzystać z Firebase Crashlytics, musisz utworzyć projekt Firebase i dodać do niego swoją aplikację. Jeśli nie masz jeszcze projektu Firebase, utwórz go. Pamiętaj, aby zarejestrować aplikację w Google Play.
Na stronie Crashlytics w konsoli Firebase kliknij Skonfiguruj Crashlytics.
Na wyświetlonym ekranie kliknij Nie > Skonfiguruj nową aplikację Firebase.
W pliku Podfile dodaj komponenty Google Analytics i 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
W terminalu lub w wierszu polecenia zainstaluj i zaktualizuj komponenty:
pod install --repo-update
Otwórz plik
BannerExample.xcworkspace
, aby Xcode załadował projekt.
Krok 2. Skonfiguruj Firebase dla swojej aplikacji
Swift
W pliku AppDelegate.swift
dodaj te wiersze:
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
W pliku AppDelegate.m
dodaj te wiersze:
@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; }
W Xcode otwórz Ustawienia kompilacji i kliknij kartę Etapy kompilacji. Dodaj skrypt uruchamiania Fabric:
Wyczyść folder kompilacji, a następnie utwórz i uruchom aplikację. Teraz możesz zalogować się w konsoli internetowej Firebase i otworzyć panel Crashlytics.
(Opcjonalnie) Testowanie konfiguracji
Dodanie przycisku wywołującego awarię pozwala wymusić awarię aplikacji za każdym naciśnięciem przycisku. To testowe ustawienie spowoduje, że kod z kroku 3 będzie wysyłać dzienniki niestandardowe na panele Firebase Crashlytics.
Swift
W pliku ViewController.swift
dodaj do funkcji viewDidLoad()
te wiersze:
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) }
Następnie dodaj ten element @IBAction
na dole deklaracji klasy:
@IBAction func crashButtonTapped(_ sender: AnyObject) { fatalError("Test Crash Happened") }
Objective-C
W klasie ViewController.m
dodaj do metody viewDidLoad
te wiersze:
‐ (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]; }
Następnie dodaj ten element IBAction
na dole deklaracji klasy:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
Na pasku narzędzi Xcode kliknij przycisk Zatrzymaj, a potem uruchom ponownie aplikację za pomocą symulatora. Po załadowaniu aplikacji możesz kliknąć przycisk Uruchom. Wróć do Xcode i kliknij przycisk Odtwórz, aby skonfigurować przesyłanie pliku z informacjami o wypadkach do Crashlytics.
Krok 3. Zapisz identyfikator odpowiedzi na reklamę
Jeśli wczytujesz wiele reklam i wyświetlasz je w różnym czasie, warto rejestrować każdy identyfikator odpowiedzi za pomocą osobnego klucza. W tym przewodniku przykład zawiera tylko 1 baner reklamowy. Dlatego w tym fragmencie kodu zliczamy identyfikator odpowiedzi reklamy jako klucz banner_ad_response_id
.
W Firebase Crashlytics możesz też tworzyć wiele niestandardowych par klucz-wartość na potrzeby różnych typów reklam i zdarzeń reklamowych. Zapoznaj się z cyklem życia żądania reklamy i powiadomieniami
- Banners
- Reklamy pełnoekranowe
- Natywna reklama z ujednolonym formatem
- Reklamy z nagrodą
- Reklamy wideo z nagrodą
Więcej informacji o logowaniu niestandardowym znajdziesz w artykule Dostosowywanie raportów o awariach Firebase Crashlytics.
Swift
Dodaj do pliku ViewController.swift
ten kod: W podstawie używa funkcji Crashlytics.setCustomValue()
w funkcji wywołania zwrotnego 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
Dodaj do pliku ViewController.m
ten kod: Krótko mówiąc, korzysta on z funkcji [FIRCrashlytics crashlytics]
setCustomValue
w funkcji 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
Gratulacje! W sekcji kluczowych informacji o sesjach awarii na panelu Crashlytics zobaczysz teraz najnowsze dane adResponseId
. Pamiętaj, że niektóre klucze mogą być widoczne w panelu dopiero po upływie godziny.