Firebase Crashlytics, uygulamanızdaki kararlılık sorunlarını yönetmenizi kolaylaştıran, hafif ve gerçek zamanlı bir kilitlenme raporlama aracıdır. Crashlytics, kilitlenmeleri akıllıca gruplandırarak ve kilitlenmelere yol açan koşulları vurgulayarak sorun giderme süresini kısaltır.
Bu kılavuzda, reklam yanıtı kimliklerini günlüğe kaydedebilmeniz için Crashlytics'i Xcode projenize nasıl entegre edeceğiniz açıklanmaktadır. Daha sonra uygulamanızdaki kilitlenmelerle ilgili sorunları giderirken reklam yanıtı kimliğini arayabilir ve reklamları bulup engellemek için AdMob'daki Reklam İnceleme Merkezi'ni kullanabilirsiniz.
1. adım: Firebase'i iOS uygulamasına ekleyin
Firebase ile temiz bir uygulamadan günlük kaydetmeyi denemek istiyorsanız GitHub'daki iOS için Google Mobile Ads SDK örnekleri deposunu indirebilir veya klonlayabilirsiniz. Bu rehberde özellikle Banner Örneği kullanılmaktadır.
Uygulamanız varsa uygulamanızın paket kimliğini kullanarak diğer adımlara geçebilirsiniz. Aynı adımlar, küçük uyarlamalarla birlikte depodaki diğer örneklere de uygulanabilir.
Firebase Crashlytics'i kullanmak için bir Firebase projesi oluşturmanız ve uygulamanızı bu projeye eklemeniz gerekir. Henüz oluşturmadıysanız bir Firebase projesi oluşturun. Uygulamanızı bu platforma kaydettiğinizden emin olun.
Firebase konsolunun Crashlytics sayfasında Crashlytics'i ayarla'yı tıklayın.
Görünen ekranda Hayır > Yeni bir Firebase uygulaması oluştur'u tıklayın.
Pod dosyasına Google Analytics ve Firebase Crashlytics için Pod'ları ekleyin.
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
Terminal'de veya komut isteminde kapsüllerinizi yükleyip güncelleyin:
pod install --repo-update
Xcode'un projeyi yüklemesi için
BannerExample.xcworkspace
dosyasını açın.
2. Adım: Firebase'i uygulamanız için yapılandırın
Swift
AppDelegate.swift
dosyanıza aşağıdaki satırları ekleyin:
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
AppDelegate.m
dosyanıza aşağıdaki satırları ekleyin:
@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; }
Xcode'da Derleme Ayarları'nı açın, Derleme Aşamaları sekmesini tıklayın. Fabric çalıştırma komut dosyasını ekleyin:
Derleme klasörünüzü temizleyin, ardından uygulamanızı derleyip çalıştırın. Artık Firebase web konsoluna giriş yapabilir ve Crashlytics kontrol paneline erişebilirsiniz.
(İsteğe bağlı): Kurulumunuzu test etme
Kilitlenme düğmesi ekleyerek her düğmeye basıldığında uygulamanın kilitlenmesini sağlayabilirsiniz. Bu test kurulumu, 3. adımdaki kodu tetikleyerek Firebase Crashlytics kontrol panellerine özel günlükler gönderir.
Swift
ViewController.swift
dosyanızdaki viewDidLoad()
işlevine aşağıdaki satırları ekleyin:
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) }
Ardından, sınıf beyanınızın en altına şu @IBAction
öğesini ekleyin:
@IBAction func crashButtonTapped(_ sender: AnyObject) { fatalError("Test Crash Happened") }
Objective-C
ViewController.m
dosyanızda viewDidLoad
yöntemine aşağıdaki satırları ekleyin:
‐ (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]; }
Ardından, sınıf beyanınızın en altına şu IBAction
öğesini ekleyin:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
Xcode araç çubuğunda Durdur düğmesine basın ve ardından simülatör aracılığıyla uygulamayı yeniden başlatın. Uygulama yüklendikten sonra Kilitlenme düğmesini tıklayabilirsiniz. Xcode'a dönün ve kilitlenme günlüğünün Crashlytics'e yüklenmesi için Oynat düğmesini tıklayın.
3. Adım: Reklam yanıtı kimliğini günlüğe kaydedin
Birden fazla reklam yükleyip bunları farklı zamanlarda gösteriyorsanız her reklam yanıt kimliğini ayrı bir anahtarla kaydetmek iyi bir fikirdir. Örneğin, bu kılavuzda yalnızca bir banner reklam içeren bir örnek kullanılmaktadır. Bu nedenle, reklam yanıtı kimliğini aşağıdaki snippet'te banner_ad_response_id
anahtarı olarak günlüğe kaydederiz.
Firebase Crashlytics'te farklı reklam türleri ve reklam etkinlikleri için birden fazla özel anahtar / değer çifti de oluşturabilirsiniz. Aşağıdakiler için reklam isteği yaşam döngüsü bildirimlerine bakın:
Özel günlük kaydı hakkında daha fazla bilgi için Firebase Crashlytics kilitlenme raporlarınızı özelleştirme başlıklı makaleyi inceleyin.
Swift
ViewController.swift
dosyanıza aşağıdaki kodu ekleyin. Temel olarak, adViewDidReceiveAd
geri çağırma işlevinde Crashlytics.setCustomValue()
işlevini kullanır.
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
ViewController.m
dosyanıza aşağıdaki kodu ekleyin. Temel olarak, adViewDidReceiveAd
işlevinde [FIRCrashlytics crashlytics]
setCustomValue
işlevini kullanır.
@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
Tebrikler! Artık Crashlytics kontrol panelinizdeki kilit bölümünde, kilitlenme oturumlarının en son adResponseId
değerini görürsünüz. Bazı anahtarların kontrol panelinizde görünmesinin bir saati bulabileceğini unutmayın.