Registrar o ID de resposta do anúncio no Crashlytics

Selecione a plataforma: iOS Unity Android (legada)

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 de solução de problemas agrupando falhas de maneira inteligente e destacando as circunstâncias que as causam.

Este guia descreve como integrar o Crashlytics ao seu projeto do Xcode para que você possa registrar IDs de resposta de anúncios. Mais tarde, ao solucionar problemas de falhas no seu app, você poderá pesquisar o ID de resposta do anúncio e usar a Central de revisão de anúncios no Ad Manager para encontrar e bloquear os anúncios.

Etapa 1:adicionar o Firebase a um aplicativo iOS

  1. Se você quiser tentar fazer login com o Firebase em um app limpo, você pode fazer o download ou clonar Google Mobile Ads SDK exemplos para iOS repositório no GitHub. Este guia usa especificamente o exemplo de banner.

    Se você já tiver um app, poderá passar para as 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.

  2. Para usar o Firebase Crashlytics, crie um projeto do Firebase e adicione seu app a ele. Se ainda não tiver feito isso, crie um projeto do Firebase. Certifique-se de registrar seu app nele.

    1. Na página do Crashlytics do console do Firebase, clique em Configurar o Crashlytics.

    2. Na tela que aparece, 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 'AdManagerBannerExample' 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 AdManagerBannerExample.xcworkspace para que o Xcode carregue o projeto.

Etapa 2:configurar o Firebase para seu app

Swift

No seu 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

No seu 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 e, em seguida, crie e execute o app. Agora você pode fazer login no Firebase console da Web e acessar o painel do Crashlytics.

(Opcional) Testar a configuração

Ao adicionar um botão de falha , você pode forçar uma falha para causar uma falha de app com cada pressionamento de botão. Essa configuração de teste vai acionar o código na etapa 3 para enviar registros personalizados aos painéis do Firebase Crashlytics.

Swift

No seu 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(AdManagerRequest())
        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 @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 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 Crash. Volte ao Xcode e clique no botão Play para que o registro de falhas seja enviado ao Crashlytics.

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

Se você carregar vários anúncios e mostrá-los em momentos diferentes, é recomendável registrar cada ID de resposta do anúncio com uma chave separada. Por exemplo, este guia usa 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.

Você também pode criar vários pares de chave-valor personalizados no Firebase Crashlytics para diferentes tipos de anúncios e eventos de anúncios. 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 código a seguir ao seu ViewController.swift. Basicamente, ele usa a Crashlytics.setCustomValue() função na adViewDidReceiveAd função de callback.

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, BannerViewDelegate {

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

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

    /// Tells the delegate an ad request loaded an ad.
    func adViewDidReceiveAd(_ bannerView: AdManagerBannerView) {
        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 código a seguir ao seu ViewController.m. Basicamente, ele usa a [FIRCrashlytics crashlytics] setCustomValue função na adViewDidReceiveAd função.

@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ê verá o adResponseId mais recente na seção de chaves das sessões de falhas no painel do Crashlytics. Algumas chaves podem levar até uma hora para ficarem visíveis no painel.