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 のポッドを追加します。
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 時間ほどかかる場合があります。