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

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

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

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

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

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

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

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

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

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

    pod install --repo-update
    
  5. Откройте файл BannerExample.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
  }
}

Цель-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()
        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)
    }

Затем добавьте этот @IBAction в конец объявления класса:

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

Цель-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, 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")
        }
    }
}

Цель-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

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