Firebase Crashlytics ile reklam yanıtı kimliğini günlüğe kaydetme

Platform seçin: Android iOS Unity

Firebase Crashlytics, uygulamanızdaki kararlılık sorunlarını kolayca yönetmenizi sağlayan hafif ve anlık bir kilitlenme raporu 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 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 bir iOS uygulamasına ekleyin

  1. Temiz bir uygulamadan Firebase ile oturum açmayı denemek isterseniz GitHub'daki iOS için Google Mobile Ads SDK örnekleri deposunu 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 birlikte depodaki diğer örnekler için de geçerlidir.

  2. 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 hizmete kaydettiğinizden emin olun.

    1. Firebase konsolunun Crashlytics sayfasında Crashlytics'i ayarla'yı tıklayın.

    2. Görünen ekranda Hayır > Yeni bir Firebase uygulaması oluştur'u tıklayın.

  3. Podfile'a 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
  4. Terminal'de veya komut isteminde Pod'larınızı yükleyin ve güncelleyin:

    pod install --repo-update
    
  5. Xcode'un projeyi yüklemesi için BannerExample.xcworkspace dosyasını açın.

2. adım: Uygulamanız için Firebase'i 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 Build Settings'i (Derleme Ayarları) açın ve Build Phases (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ımda yer alan kodun Firebase Crashlytics kontrol panellerine özel günlükler göndermesini tetikleyecektir.

Swift

ViewController.swift dosyanızda viewDidLoad() işlevine aşağıdaki satırları ekleyin:

    override func viewDidLoad() {
        super.viewDidLoad()
        bannerView.delegate = self
        bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
        bannerView.rootViewController = self
        bannerView.load(Request)
        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 bildiriminize şu @IBAction ifadesini ekleyin:

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

Objective-C

ViewController.m içinde 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 bildiriminize şu IBAction ifadesini ekleyin:

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

Xcode araç çubuğunda Durdur düğmesine basın ve ardından uygulamayı bir simülatör aracılığıyla 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ükleyip bunları farklı zamanlarda gösteriyorsanız her reklam yanıtı kimliğini ayrı bir anahtarla günlüğe kaydetmeniz önerilir. Örneğin, bu kılavuzda yalnızca bir banner reklam içeren bir örnek kullanılıyor. Bu nedenle, reklam yanıtı kimliğini aşağıdaki snippet'te banner_ad_response_id anahtarı olarak günlüğe kaydederiz.

Farklı reklam türleri ve reklam etkinlikleri için Firebase Crashlytics'te birden fazla özel anahtar / değer çifti de oluşturabilirsiniz. Reklam isteği yaşam döngüsüyle ilgili bildirimler için

Ö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 dosyasına 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, BannerViewDelegate {

    /// The banner view.
    @IBOutlet weak var bannerView: BannerView!

    override func viewDidLoad() {
       super.viewDidLoad()
       ...
       bannerView.delegate = self
       ...
    }

    /// Tells the delegate an ad request loaded an ad.
    func adViewDidReceiveAd(_ bannerView: BannerView) {
        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 dosyasına aşağıdaki kodu ekleyin. Temel olarak, [FIRCrashlytics crashlytics] setCustomValue işlevini adViewDidReceiveAd işlevinde 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öreceksiniz. Bazı anahtarların kontrol panelinizde görünmesinin bir saati bulabileceğini unutmayın.