Firebase Crashlytics, uygulamanızdaki kararlılık sorunlarını yönetmenizi kolaylaştıran basit ve gerçek zamanlı bir kilitlenme raporudur. Crashlytics, kilitlenmeleri akıllıca gruplandırıp ortaya çıkan durumları vurgulayarak sorun giderme konusunda size zaman kazandırır.
Bu kılavuzda, reklam yanıtı kimliklerini günlüğe kaydedebilmek 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 bir iOS uygulamasına ekleyin
Temiz bir uygulamadan Firebase ile giriş yapmayı denemek isterseniz GitHub'da iOS depo için Google Mobile Ads SDK'sı örneklerini indirebilir veya klonlayabilirsiniz. Bu kılavuzda özellikle Banner Örneği kullanılmaktadır.
Zaten bir uygulamanız varsa uygulamanızın paket kimliğiyle diğer adımlara geçebilirsiniz. Aynı adımlar, küçük uyarlamalarla kod deposundaki diğer örneklere de uygulanabilir.
Firebase Crashlytics'i kullanmak için bir Firebase projesi oluşturup uygulamanızı bu projeye eklemeniz gerekir. Henüz yapmadıysanız bir Firebase projesi oluşturun. Uygulamanızı buraya kaydettiğinizden emin olun.
Firebase konsolunun Crashlytics sayfasında Crashlytics'i kur'u tıklayın.
Açılan ekranda Hayır > Yeni bir Firebase uygulaması oluştur'u tıklayın.
Podfile'a Google Analytics ve Firebase Crashlytics Kapsülleri 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 bir komut isteminde Kapsüllerinizi yükleyip güncelleyin:
pod install --repo-update
Projeyi yüklemek üzere Xcode için
BannerExample.xcworkspace
dosyasını açın.
2. Adım: Firebase'i uygulamanız için yapılandırın
Swift
AppDelegate.swift
sayfanızda 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
sayfanızda 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ı): Ayarlarınızı test edin
Kilitlenme düğmesi ekleyerek, her düğmeye bastığınızda uygulama kilitlenmesine neden olacak bir kilitlenmeyi zorlayabilirsiniz. Bu test kurulumu, özel günlüklerin Firebase Crashlytic kontrol panellerine gönderilmesi için 3. adımdaki kodu tetikler.
Swift
ViewController.swift
sayfanızda, aşağıdaki satırları viewDidLoad()
işlevine 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, bu @IBAction
öğesini sınıf beyanınızın altına 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, bu IBAction
öğesini sınıf beyanınızın altına ekleyin:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
Xcode araç çubuğunda Durdur düğmesine basın ve ardından bir simülatör aracılığıyla uygulamayı yeniden başlatın. Uygulama yüklendikten sonra Kilitlenme düğmesini tıklayabilirsiniz. Xcode'a geri 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üklüyor ve bunları farklı zamanlarda gösteriyorsanız her reklam yanıtı kimliğini ayrı bir anahtarla günlüğe kaydetmek iyi bir fikirdir. Örneğin, bu kılavuzda yalnızca bir banner reklam içeren bir örnek kullanılmıştır. Bu nedenle, reklam yanıtı kimliğini aşağıdaki snippet'te banner_ad_response_id
anahtarı olarak kaydederiz.
Ayrıca Firebase Crashlytics'te farklı reklam türleri ve reklam etkinlikleri için birden fazla özel anahtar / değer çifti oluşturabilirsiniz. Reklam isteği yaşam döngüsü bildirimlerine bakarak
Özel günlük kaydı hakkında daha fazla bilgi için Firebase Crashlytics kilitlenme raporlarınızı özelleştirme sayfasını ziyaret edin.
Swift
Aşağıdaki kodu ViewController.swift
cihazınıza ekleyin. Bu işlev esasen adViewDidReceiveAd
geri çağırma işlevindeki 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
Aşağıdaki kodu ViewController.m
cihazınıza ekleyin. Aslında 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 en son adResponseId
değerini, Crashlytics kontrol panelinizdeki kilitlenme oturumlarının önemli bölümünde görebilirsiniz. Bazı anahtarların kontrol panelinizde görünür hale gelmesinin bir saati bulabileceğini unutmayın.