Firebase Crashlytics は軽量のリアルタイムのクラッシュ レポート ツールで、アプリの安定性の問題を簡単に管理することができます。Crashlytics では、クラッシュの高度な分類が行われ、クラッシュにつながる状況がハイライト表示されるため、トラブルシューティングの時間を節約できます。
このガイドでは、Crashlytics を Xcode プロジェクトに統合して、広告レスポンス ID をログに記録する方法について説明します。後でアプリのクラッシュをトラブルシューティングするときに、広告レスポンス ID を調べ、 AdMob の広告レビュー センターを使用して、広告を見つけてブロックできます。
ステップ 1: Firebase を iOS アプリに追加する
新しいアプリで Firebase のロギングを試す場合は、GitHub で iOS リポジトリの Google Mobile Ads SDK のサンプルをダウンロードまたはクローンを作成できます。このガイドでは、 バナーのサンプルを使用します。
すでにアプリをお持ちの場合は、アプリのバンドル ID を使用して次の手順に進むことができます。ここで説明する手順は、いくつかの細かな点を除いて、ほぼそのままリポジトリ内の他のサンプルに対しても適用できます。
Firebase Crashlytics を使用するには、Firebase プロジェクトを作成し、アプリをプロジェクトに追加する必要があります。まだ作成していない場合は Firebase プロジェクトを作成します。そのプロジェクトにアプリを登録してください。
Firebase コンソールの [Crashlytics] ページで、[Crashlytics を設定] をクリックします。
表示される画面で、[いいえ] > [新しい Firebase アプリを設定] をクリックします。
Podfile で、Google アナリティクスと Firebase Crashlytics の Pod を追加します。
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
ターミナルまたはコマンド プロンプトで、Pod をインストールして更新します。
pod install --repo-update
Xcode の
BannerExample.xcworkspace
ファイルを開き、プロジェクトを読み込みます。
ステップ 2: アプリ用に Firebase を構成する
Swift
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 で [Build Settings] を開き、[Build Phases] タブをクリックします。Fabric 実行スクリプトを追加します。
ビルドフォルダをクリーンアップしてから、アプリをビルドして実行します。これで、Firebase ウェブ コンソールにログインして Crashlytics ダッシュボードにアクセスできます。
(省略可): 設定をテストする
クラッシュ ボタンを追加すると、ボタンを押すたびにアプリで強制的にクラッシュを発生させることができます。このテスト設定により、ステップ 3 のコードがトリガーされ、Firebase Crashlytic ダッシュボードにカスタムログが送信されます。
Swift
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") }
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 ツールバーで [Stop] ボタンを押し、シミュレータを使用してアプリを再起動します。アプリが読み込まれたら、[Crash] ボタンをクリックします。Xcode に戻り、Crashlytics にアップロードするクラッシュログの [Play] ボタンをクリックします。
ステップ 3: 広告レスポンス ID をログに記録する
複数の広告を読み込んで異なるタイミングで表示する場合は、それぞれの広告レスポンス ID を個別のキーで記録することをおすすめします。このガイドでは 1 つのバナー広告のみのサンプルを使用するため、以下のスニペットのように広告レスポンス ID を banner_ad_response_id
キーとして記録します。
Firebase Crashlytics では、広告の種類やイベントに応じて複数のカスタムの Key-Value ペアを作成することもできます。広告リクエストのライフサイクル通知については
カスタム ロギングの詳細については、Firebase Crashlytics のクラッシュ レポートをカスタマイズするをご覧ください。
Swift
次のコードを ViewController.swift
に追加します。これは基本的に、adViewDidReceiveAd
コールバック関数で Crashlytics.setCustomValue()
関数を使用します。
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
次のコードを ViewController.m
に追加します。基本的には、adViewDidReceiveAd
関数で [FIRCrashlytics crashlytics]
setCustomValue
関数を使用します。
@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
が表示されるようになります。キーによっては、ダッシュボードに表示されるまでに 1 時間ほどかかる場合があります。