Регистрация идентификатора ответа объявления с помощью Firebase Crashlytics

Выберите платформу: Android iOS Unity

Firebase Crashlytics — это легковесный инструмент для отслеживания сбоев в реальном времени, который упрощает управление проблемами стабильности вашего приложения. Crashlytics экономит время на устранение неполадок, интеллектуально группируя сбои и выделяя обстоятельства, которые к ним привели.

В этом руководстве описано, как интегрировать Crashlytics в ваш проект Xcode, чтобы вы могли регистрировать идентификаторы ответов на рекламу. Позже, при устранении неполадок, связанных со сбоями в вашем приложении, вы сможете найти идентификатор ответа на рекламу и использовать Центр проверки рекламы в Менеджере рекламы, чтобы найти и заблокировать рекламу.

Шаг 1: Добавьте Firebase в iOS-приложение

  1. Если вы хотите попробовать логининг с помощью Firebase из чистого приложения, вы можете загрузить или клонировать репозиторий примеров Google Mobile Ads SDK для iOS на GitHub. В этом руководстве используется конкретный пример баннера .

    Если у вас уже есть приложение, вы можете перейти к следующим шагам, используя идентификатор пакета вашего приложения. Те же шаги можно применить и к другим примерам в репозитории с небольшими изменениями.

  2. Для использования Firebase Crashlytics необходимо создать проект Firebase и добавить в него ваше приложение. Если вы еще этого не сделали, создайте проект Firebase. Обязательно зарегистрируйте в нем свое приложение .

    1. На странице Crashlytics в консоли Firebase нажмите «Настроить Crashlytics» .

    2. На появившемся экране нажмите «Нет» > «Настроить новое приложение Firebase» .

  3. В файл Podfile добавьте Pod-ы для Google Analytics и 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. В терминале или командной строке установите и обновите ваши Pod-ы:

    pod install --repo-update
    
  5. Откройте файл AdManagerBannerExample.xcworkspace в Xcode, чтобы загрузить проект.

Шаг 2: Настройте Firebase для вашего приложения.

Быстрый

В файл AppDelegate.swift добавьте следующие строки:

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

В файл AppDelegate.m добавьте следующие строки:

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

В Xcode откройте «Настройки сборки» , перейдите на вкладку «Этапы сборки» . Добавьте скрипт запуска Fabric:

Очистите папку сборки, затем соберите и запустите приложение. Теперь вы можете войти в веб-консоль Firebase и получить доступ к панели мониторинга Crashlytics.

(Необязательно): Проверьте свою настройку

Добавив кнопку срабатывания, вы можете принудительно вызвать сбой приложения при каждом нажатии. Эта тестовая настройка запустит код из шага 3 для отправки пользовательских логов на панели мониторинга Firebase Crashlytic.

Быстрый

В файл ViewController.swift добавьте следующие строки в функцию 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)
    }

Затем добавьте следующий @IBAction в конец объявления вашего класса:

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

Objective-C

В файл ViewController.m добавьте следующие строки в метод 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];
}

Затем добавьте следующий IBAction в конец объявления вашего класса:

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

На панели инструментов Xcode нажмите кнопку «Стоп» , а затем перезапустите приложение через симулятор. После загрузки приложения вы можете нажать кнопку «Сбой» . Вернитесь в Xcode и нажмите кнопку «Воспроизвести» , чтобы загрузить журнал сбоев в Crashlytics.

Шаг 3: Зарегистрируйте идентификатор ответа на объявление.

Если вы загружаете несколько объявлений и показываете их в разное время, рекомендуется регистрировать идентификатор ответа на каждое объявление с помощью отдельного ключа. Например, в этом руководстве используется пример только с одним баннерным объявлением. Поэтому в следующем фрагменте кода мы регистрируем идентификатор ответа на объявление как ключ banner_ad_response_id .

В Firebase Crashlytics также можно создавать несколько пользовательских пар ключ/значение для разных типов объявлений и событий, связанных с объявлениями. См. раздел «Уведомления о жизненном цикле запроса объявления» для получения дополнительной информации.

Для получения дополнительной информации о настройке логирования посетите раздел «Настройка отчетов о сбоях Firebase Crashlytics» .

Быстрый

Добавьте следующий код в ваш ViewController.swift . По сути, он использует функцию Crashlytics.setCustomValue() в функции обратного вызова adViewDidReceiveAd .

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

Добавьте следующий код в ваш ViewController.m . По сути, он использует функцию [FIRCrashlytics crashlytics] setCustomValue в функции 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

Поздравляем! Теперь в разделе ключей сессий Crashlytics на вашей панели управления вы увидите самый последний adResponseId . Обратите внимание, что для отображения некоторых ключей на панели управления может потребоваться до часа.