Enregistrer l'ID de réponse d'annonce avec Firebase Crashlytics

Firebase Crashlytics est un outil de création de rapports de plantages en temps réel léger qui vous permet de gérer facilement les problèmes de stabilité de votre application. Crashlytics vous fait gagner du temps pour résoudre les problèmes en regroupant intelligemment les plantages et en mettant en évidence les circonstances qui les précèdent.

Ce guide explique comment intégrer Crashlytics à votre projet Xcode afin de pouvoir enregistrer les ID de réponse d'annonce. Par la suite, lorsque vous corrigerez les plantages dans votre application, vous pourrez rechercher l'ID de réponse d'annonce et utiliser le centre de vérification des annonces dans AdMob pour rechercher et bloquer les annonces.

Étape 1:Ajoutez Firebase à une application iOS

  1. Si vous souhaitez essayer de vous connecter avec Firebase à partir d'une application propre, vous pouvez télécharger ou cloner les exemples du SDK Google Mobile Ads pour le dépôt iOS sur GitHub. Ce guide utilise spécifiquement l' exemple de bannière.

    Si vous avez déjà une application, vous devriez pouvoir passer à d'autres étapes avec l'ID du bundle de votre application. Les mêmes étapes peuvent également être appliquées à d'autres exemples du dépôt avec des adaptations mineures.

  2. Pour utiliser Firebase Crashlytics, vous devez créer un projet Firebase et y ajouter votre application. Si vous ne l'avez pas déjà fait, créez un projet Firebase. Assurez-vous d'y enregistrer votre application.

    1. Sur la page "Crashlytics" de la console Firebase, cliquez sur Configurer Crashlytics.

    2. Sur l'écran qui s'affiche, cliquez sur Non > Configurer une nouvelle application Firebase.

  3. Dans le fichier Podfile, ajoutez les pods pour Google Analytics et 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. Dans le terminal ou une invite de commande, installez et mettez à jour vos pods:

    pod install --repo-update
    
  5. Ouvrez le fichier BannerExample.xcworkspace pour que Xcode puisse charger le projet.

Étape 2:Configurez Firebase pour votre application

Swift

Dans le fichier AppDelegate.swift, ajoutez les lignes suivantes:

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

Dans le fichier AppDelegate.m, ajoutez les lignes suivantes:

@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;
}

Dans Xcode, ouvrez Build Settings (Paramètres de compilation), puis cliquez sur l'onglet Build Phases (Phases de compilation). Ajoutez le script d'exécution Fabric:

Nettoyez votre dossier de compilation, puis compilez et exécutez votre application. Vous pouvez maintenant vous connecter à la console Web Firebase et accéder au tableau de bord Crashlytics.

(Facultatif) Tester votre configuration

En ajoutant un bouton de plantage, vous pouvez forcer un plantage qui entraîne un plantage de l'application à chaque pression de bouton. Cette configuration de test déclenchera le code de l'étape 3 pour envoyer des journaux personnalisés aux tableaux de bord Firebase Crashlytic.

Swift

Dans ViewController.swift, ajoutez les lignes suivantes à la fonction 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)
    }

Ajoutez ensuite ce @IBAction en bas de votre déclaration de classe:

    @IBAction func crashButtonTapped(_ sender: AnyObject) {
        fatalError("Test Crash Happened")
    }

Objective-C

Dans votre fichier ViewController.m, ajoutez les lignes suivantes à la méthode 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];
}

Ajoutez ensuite ce IBAction en bas de votre déclaration de classe:

‐ (IBAction)crashButtonTapped:(id)sender {
    assert(NO);
}

Dans la barre d'outils Xcode, appuyez sur le bouton Stop (Arrêter), puis relancez l'application via un simulateur. Une fois l'application chargée, vous pouvez cliquer sur le bouton Plantage. Revenez dans Xcode et cliquez sur le bouton Play (Lecture) pour importer le journal des plantages dans Crashlytics.

Étape 3:Consignez l'ID de réponse d'annonce.

Si vous chargez plusieurs annonces et les diffusez à des moments différents, nous vous recommandons d'enregistrer chaque ID de réponse d'annonce avec une clé distincte. Par exemple, ce guide utilise un exemple ne comportant qu'une seule bannière. Par conséquent, nous consignons l'ID de réponse d'annonce en tant que clé banner_ad_response_id dans l'extrait de code suivant.

Vous pouvez également créer plusieurs paires clé / valeur personnalisées dans Firebase Crashlytics pour différents types d'annonces et événements d'annonce. Reportez-vous aux notifications sur le cycle de vie des demandes d'annonces

Pour en savoir plus sur la journalisation personnalisée, consultez Personnaliser vos rapports d'erreur Firebase Crashlytics.

Swift

Ajoutez le code suivant à votre fichier ViewController.swift. Il utilise essentiellement la fonction Crashlytics.setCustomValue() dans la fonction de rappel 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

Ajoutez le code suivant à votre fichier ViewController.m. En bref, il utilise la fonction [FIRCrashlytics crashlytics] setCustomValue dans la fonction 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

Félicitations ! Le adResponseId le plus récent s'affiche désormais dans la section clé des sessions de plantage de votre tableau de bord Crashlytics. Notez qu'un délai d'une heure peut être nécessaire avant que certaines clés ne soient visibles dans votre tableau de bord.