Zapisywanie identyfikatora odpowiedzi reklamy za pomocą Crashlytics Firebase

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

  1. 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.

  2. 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.

    1. Na stronie Crashlytics w konsoli Firebase kliknij Skonfiguruj Crashlytics.

    2. Na wyświetlonym ekranie kliknij Nie > Skonfiguruj nową aplikację Firebase.

  3. 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
    
  4. W terminalu lub w wierszu polecenia zainstaluj i zaktualizuj komponenty:

    pod install --repo-update
    
  5. 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

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.