Geração de IDs de resposta de anúncio com o Firebase Crashlytics

O Firebase Crashlytics é uma ferramenta de relatório de erros 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 maneira inteligente as falhas e destacando as circunstâncias que levam a elas.

Neste guia, descrevemos 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 AdMob para encontrar e bloquear os anúncios.

Etapa 1:adicionar o Firebase a um app iOS

  1. Para tentar gerar registros 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 para o repositório iOS no GitHub. Neste guia, usamos especificamente o exemplo de banner.

    Se você já tiver um app, poderá avançar 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.

  2. Para usar o Firebase Crashlytics, crie um projeto do Firebase e adicione seu app a ele. Crie um projeto do Firebase, caso ainda não tenha feito isso. Não se esqueça de registrar seu app nele.

    1. Na página do Crashlytics no Console do Firebase, clique em Configurar Crashlytics.

    2. Na tela exibida, clique em Não > Configurar um novo app do Firebase.

  3. 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
    
  4. No Terminal ou em um prompt de comando, instale e atualize seus pods:

    pod install --repo-update
    
  5. Abra o arquivo BannerExample.xcworkspace para o Xcode carregar o projeto.

Etapa 2:configurar o Firebase para seu app

Swift

No seu AppDelegate.swift, adicione estas 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

No seu AppDelegate.m, adicione estas 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 do build. Em seguida, crie 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 cause uma falha no app a cada vez que um 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 Crashlytic.

Swift

No seu 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 ao final 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 ao final 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 por meio de um simulador. Depois que o app for carregado, clique no botão Falha. Volte ao Xcode e clique no botão Play para que o registro de falhas seja enviado ao Crashlytics.

Etapa 3:registre o ID de resposta do anúncio

Se você carregar vários anúncios e exibi-los em momentos diferentes, convém registrar cada ID de resposta do anúncio com uma chave separada. Neste guia, usamos um exemplo que tem 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 personalizados de chave / valor no Firebase Crashlytics para diferentes tipos e eventos de anúncios. Consulte as notificações do ciclo de vida da solicitação de anúncio para

Acesse Personalizar seus relatórios de erros do Firebase Crashlytics para mais informações sobre a geração de registros personalizados.

Swift

Adicione o seguinte código ao seu ViewController.swift. Basicamente, ela 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 seu 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! O adResponseId mais recente aparecerá na seção da chave de sessões de falha no painel do Crashlytics. Algumas chaves podem levar até uma hora para ficarem visíveis no painel.