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 agrupando de forma inteligente as falhas e destacando as 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, ao resolver problemas de falhas no app, você pode procurar o ID de resposta do anúncio e usar a Central de revisão de anúncios na Ad Manager para encontrar e bloquear os anúncios.
Etapa 1: adicionar o Firebase a um aplicativo iOS
Se você quiser tentar fazer login com o Firebase em um app limpo, faça o download ou clone os exemplos do SDK dos anúncios para dispositivos móveis do Google no repositório do iOS no GitHub. Este guia usa especificamente o Exemplo de banner.
Se você já tiver um app, poderá prosseguir para outras etapas com o ID do pacote do app. As mesmas etapas também podem ser aplicadas a outros exemplos no repositório com pequenas adaptações.
Para usar o Firebase Crashlytics, você precisa criar um projeto do Firebase e adicionar seu app a ele. Crie um projeto do Firebase, caso ainda não tenha feito isso. Registre seu app nele.
Na página do Crashlytics no console do Firebase, clique em Configurar 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 'AdManagerBannerExample' 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
AdManagerBannerExample.xcworkspace
do Xcode para 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, clique na guia Build Phases. Adicione o script de execução do Fabric:
Limpe a pasta de build e compile e execute o app. Agora você pode fazer login no console da Web do Firebase e acessar o painel do Crashlytics.
(Opcional): testar a configuração
Ao adicionar um botão de falha, você pode forçar uma falha que causa uma falha no app a cada vez que o botão é pressionado. Essa configuração de teste aciona o código na etapa 3 para enviar registros personalizados aos painéis do Firebase Crashlytics.
Swift
No ViewController.swift
, adicione as seguintes linhas à
função viewDidLoad()
:
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) }
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 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 Parar e reinicie o app usando um simulador. Depois que o app for carregado, clique no botão Crash. Volte para o Xcode e clique no botão Play para que o registro de falhas seja enviado ao Crashlytics.
Etapa 3: registrar o ID da resposta do anúncio
Se você carregar vários anúncios e os mostrar em momentos diferentes, é recomendável registrar cada ID de resposta do anúncio com uma chave separada. Por exemplo, este guia usa um
exemplo com apenas um anúncio de banner. Portanto, registramos o ID de 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úncios. Consulte as notificações do ciclo de vida das solicitações de anúncios
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
: Essencialmente, ele usa a função
Crashlytics.setCustomValue()
na função de callback 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
Adicione o seguinte código ao ViewController.m
: Essencialmente, ele 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 ficarem visíveis no painel.