O Firebase Crashlytics é uma ferramenta de relatório de falhas leve e em tempo real que facilita o gerenciamento de problemas de estabilidade no seu app. O Crashlytics economiza tempo na solução de problemas com o agrupamento inteligente das falhas e a exibição das circunstâncias que levam a elas.
Este guia descreve como integrar o Crashlytics ao seu projeto do Xcode para registrar IDs de resposta de anúncios. Depois, quando você resolver problemas de falhas no app, poderá pesquisar o ID da resposta do anúncio e usar a Central de revisão de anúncios na AdMob para encontrar e bloquear os anúncios.
Etapa 1:adicionar o Firebase a um aplicativo iOS
Se você quiser testar o registro em um app limpo com o Firebase, faça o download ou clone os exemplos do SDK dos anúncios para dispositivos móveis do Google para iOS repositório no GitHub. Este guia usa especificamente o Exemplo de banner.
Se você já tiver um app, poderá seguir para outras etapas com o ID do pacote dele. As mesmas etapas também podem ser aplicadas a outros exemplos no repositório com pequenas adaptações.
Para usar o Firebase Crashlytics, crie um projeto do Firebase e adicione seu app a ele. Se você ainda não tiver um projeto do Firebase, crie um. Registre seu app nele.
Na página do Crashlytics no console do Firebase, clique em Configurar o Crashlytics.
Na tela que aparece, clique em Não > Configurar um novo app do Firebase.
No Podfile, adicione os pods do Google Analytics e do 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
No terminal ou em um prompt de comando, instale e atualize seus pods:
pod install --repo-update
Abra o arquivo
BannerExample.xcworkspace
para o Xcode carregar o projeto.
Etapa 2:configurar o Firebase para seu app
Swift
Em AppDelegate.swift
, adicione as seguintes linhas:
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
Em AppDelegate.m
, adicione as seguintes linhas:
@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; }
No Xcode, abra Build Settings e clique na guia Build Phases. Adicione o script de execução do Fabric:
Limpe a pasta de build, crie e execute o app. Agora você pode fazer login no console da Web do Firebase e acessar o painel do Crashlytics.
(Opcional): testar sua configuração
Ao adicionar um botão de falha é possível forçar uma falha para causar um erro no app a cada vez que o botão é pressionado. Essa configuração de teste vai acionar o código na etapa 3 para enviar registros personalizados aos painéis do Firebase Crashlytics.
Swift
Em ViewController.swift
, adicione as seguintes linhas à função
viewDidLoad()
:
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) }
Em seguida, adicione este @IBAction
à parte de baixo da declaração de classe:
@IBAction func crashButtonTapped(_ sender: AnyObject) { fatalError("Test Crash Happened") }
Objective-C
No seu ViewController.m
, adicione as seguintes linhas ao método viewDidLoad
:
‐ (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]; }
Em seguida, adicione este IBAction
à parte de baixo da declaração de classe:
‐ (IBAction)crashButtonTapped:(id)sender { assert(NO); }
Na barra de ferramentas do Xcode, pressione o botão Stop e reinicie o app em um simulador. Depois que o app for carregado, clique no botão Falha. Volte para o Xcode e clique no botão Reproduzir para que o registro de falha seja enviado ao Crashlytics.
Etapa 3:registrar o ID da resposta do anúncio
Se você carregar vários anúncios e mostrá-los em momentos diferentes, é recomendável
registrar cada ID de resposta de anúncio com uma chave separada. Por exemplo, este guia usa um exemplo com apenas um anúncio de banner. Portanto, registramos o ID da resposta do anúncio como a chave banner_ad_response_id
no snippet a seguir.
Também é possível criar vários pares de chave-valor personalizados no Firebase Crashlytics para diferentes tipos e eventos de anúncio. Consulte as notificações do ciclo de vida da solicitação de anúncio para
Acesse Personalizar relatórios de erros do Firebase Crashlytics para mais informações sobre o registro personalizado.
Swift
Adicione o seguinte código ao ViewController.swift
: Basicamente, ele usa a função
Crashlytics.setCustomValue()
na função de callback adViewDidReceiveAd
.
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
Adicione o seguinte código ao ViewController.m
: Basicamente, ela usa a função
[FIRCrashlytics crashlytics]
setCustomValue
na função 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
Parabéns! Agora você vai encontrar o adResponseId
mais recente na seção principal das sessões de falha no painel do Crashlytics. Algumas chaves podem levar até uma hora para aparecer no painel.