Mencatat ID Respons Iklan dengan Firebase Crashlytics

Firebase Crashlytics adalah pelapor error yang ringan dan bekerja secara realtime untuk memudahkan Anda mengelola masalah stabilitas di aplikasi. Crashlytics menghemat waktu pemecahan masalah dengan mengelompokkan error secara cerdas dan menyoroti situasi yang menyebabkannya.

Panduan ini menjelaskan cara mengintegrasikan Crashlytics ke dalam project Xcode sehingga Anda dapat mencatat ID respons iklan. Kemudian, saat memecahkan masalah error di aplikasi, Anda dapat mencari ID respons iklan dan menggunakan Pusat Peninjauan Iklan di AdMob untuk menemukan dan memblokir iklan.

Langkah 1: Menambahkan Firebase ke aplikasi iOS

  1. Jika ingin mencoba login dengan Firebase dari aplikasi bersih, Anda dapat mendownload atau meng-clone contoh Google Mobile Ads SDK untuk repositori iOS di GitHub. Panduan ini secara khusus menggunakan Contoh Banner .

    Jika sudah memiliki aplikasi, Anda akan dapat melanjutkan ke langkah lain dengan ID paket aplikasi. Langkah yang sama juga dapat diterapkan pada contoh lain dalam repositori dengan adaptasi kecil.

  2. Untuk menggunakan Firebase Crashlytics, Anda harus membuat project Firebase dan menambahkan aplikasi ke project tersebut. Jika Anda belum melakukannya, buat project Firebase. Pastikan untuk mendaftarkan aplikasi Anda ke aplikasi tersebut.

    1. Di halaman Crashlytics di Firebase console, klik Siapkan Crashlytics.

    2. Di layar yang muncul, klik Tidak > Siapkan aplikasi Firebase baru.

  3. Di Podfile, tambahkan Pod untuk Google Analytics dan 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. Di Terminal atau command prompt, instal dan update Pod Anda:

    pod install --repo-update
    
  5. Buka file BannerExample.xcworkspace agar Xcode memuat project.

Langkah 2: Konfigurasikan Firebase untuk aplikasi Anda

Swift

Di AppDelegate.swift, tambahkan baris berikut:

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

Di AppDelegate.m, tambahkan baris berikut:

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

Di Xcode, buka Build Settings, klik tab Build Phases. Tambahkan skrip jalankan Fabric:

Kosongkan folder build, lalu build dan jalankan aplikasi. Sekarang Anda dapat login ke konsol web Firebase dan mengakses dasbor Crashlytics.

(Opsional): Menguji Penyiapan

Dengan Menambahkan tombol error, Anda dapat memaksa error untuk menyebabkan error aplikasi setiap kali tombol ditekan. Konfigurasi pengujian ini akan memicu kode di Langkah 3 untuk mengirim log kustom ke dasbor Firebase Crashlytic.

Swift

Di ViewController.swift, tambahkan baris berikut ke fungsi 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)
    }

Kemudian, tambahkan @IBAction ini ke bagian bawah deklarasi class Anda:

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

Objective-C

Di ViewController.m, tambahkan baris berikut ke metode 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];
}

Kemudian, tambahkan IBAction ini ke bagian bawah deklarasi class Anda:

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

Di toolbar Xcode, tekan tombol Stop, lalu luncurkan kembali aplikasi melalui simulator. Setelah aplikasi dimuat, Anda dapat mengklik tombol Crash. Kembali ke Xcode dan klik tombol Play agar log error dapat diupload ke Crashlytics.

Langkah 3: Catat ID respons iklan ke dalam log

Jika Anda memuat beberapa iklan dan menampilkannya pada waktu yang berbeda, sebaiknya catat setiap ID respons iklan ke dalam log dengan kunci terpisah. Misalnya, panduan ini menggunakan contoh yang hanya memiliki satu iklan banner. Oleh karena itu, kita mencatat ID respons iklan sebagai kunci banner_ad_response_id dalam cuplikan berikut.

Anda juga dapat membuat beberapa pasangan kunci/nilai kustom di Firebase Crashlytics untuk berbagai jenis iklan dan peristiwa iklan. Lihat notifikasi siklus proses permintaan iklan untuk

Buka artikel Menyesuaikan laporan error Firebase Crashlytics untuk mengetahui informasi selengkapnya tentang logging kustom.

Swift

Tambahkan kode berikut ke ViewController.swift Anda. Pada dasarnya, penggunaan fungsi Crashlytics.setCustomValue() dalam fungsi 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

Tambahkan kode berikut ke ViewController.m Anda. Pada dasarnya, fungsi ini menggunakan fungsi [FIRCrashlytics crashlytics] setCustomValue dalam fungsi 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

Selamat! Sekarang Anda akan melihat adResponseId terbaru di bagian utama sesi error di dasbor Crashlytics. Perhatikan bahwa beberapa kunci mungkin memerlukan waktu hingga satu jam agar terlihat di dasbor Anda.