iOS 向け Firebase Performance Monitoring を使ってみる

このガイドでは、アプリで Firebase Performance Monitoring を使用する方法を次の手順に沿って説明します。

  1. 事前準備
  2. Firebase を iOS プロジェクトに追加する
  3. Performance Monitoring をアプリに追加する
  4. (オプション)カスタム トレースと 1 つ以上のカスタム指標をアプリに定義する
  5. Firebase コンソールで Performance Monitoring の結果を確認する
  6. アプリをデプロイし、Firebase コンソールで結果をレビューする

前提条件

事前に次の環境を準備しておく必要があります。

  • Xcode 8.2.1 以降
  • iOS 8 以降をターゲットにした Xcode プロジェクト
  • アプリのバンドル識別子
  • CocoaPods 1.0.0 以降

Firebase を iOS プロジェクトに追加する

次に、Firebase をアプリに追加し、SDK を追加して、アプリで Firebase を初期化する必要があります。手順については、Firebase を iOS プロジェクトに追加するを参照してください。

Performance Monitoring をアプリに追加する

  1. プロジェクト用に作成した podfile を開き(または pod init コマンドを使用して作成)、ターゲット セクション内に次の行を追加します。
    pod 'Firebase/Core'
    pod 'Firebase/Performance'
  2. podfile があるディレクトリで、次のコマンドを実行して Performance Monitoring SDK をインストールします。
    pod install
  3. コマンドの最後で、Xcode を使用して .xcworkspace ファイルを開きます。
  4. UIApplicationDelegate で Firebase モジュールをインポートします。

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  5. FirebaseApp 共有インスタンスを構成します。通常はアプリケーションの application:didFinishLaunchingWithOptions: メソッドで行います。

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  6. アプリを再コンパイルします。 これで自動トレースと HTTP/S ネットワーク リクエストがモニタリングされるようになりました。

(オプション)カスタム トレースと 1 つ以上のカスタム指標をアプリに定義する

カスタム トレースは、アプリ内の特定のコードに関連付けられたパフォーマンス データのレポートです。カスタム トレースの詳細については、Performance Monitoring の概要を参照してください。アプリには複数のカスタム トレースを設定でき、一度に複数のカスタム トレースを実行できます。各カスタム トレースには、アプリ内のパフォーマンス関連のイベントをカウントする 1 つ以上の指標を設定でき、これらの指標は、それぞれを作成するトレースに関連付けられています。

  1. Performance Monitoring モジュールをヘッダーに追加します。

    Swift

    import FirebasePerformance

    Objective-C

    @import FirebasePerformance;

  2. アプリのトレースを開始するコードの直前に次のコード行を追加して、test trace というトレースを開始します。

    Swift

    let trace = Performance.startTrace(name: "test trace")

    Objective-C

    FIRTrace *trace = [FIRPerformance startTraceWithName:@"test trace"];

  3. アプリで発生するパフォーマンス関連のイベント(キャッシュ ヒットや再試行など)をカウントするには、イベントが発生するたびに、次のような行を追加します。異なる種類のイベントをカウントする場合は、retry 以外の文字列を使用してイベントの名前を指定します。

    Swift

    trace.incrementMetric(named:"retry", by: 1)

    Objective-C

    [trace incrementMetric:@"retry" by:1];

  4. トレースを停止するコードの直後に次のコード行を追加します。

    Swift

    trace.stop()

    Objective-C

    [trace stop];

Firebase コンソールで Performance Monitoring の結果を確認する

  1. Xcode シミュレータでアプリを実行します([製品] - > [実行])。
  2. Firebase コンソールに Performance Monitoring の結果が表示されていることを確認します。結果は 12 時間以内に表示されます。

アプリをデプロイし、Firebase コンソールで結果を確認する

Xcode シミュレータとテスト端末を使用して Performance Monitoring を検証したら、アプリのアップデート バージョンをユーザーにデプロイし、Firebase コンソールを使用してパフォーマンス データをモニタリングします。

(オプション)特定のネットワーク リクエストのモニタリングを追加する

Performance Monitoring はネットワーク リクエストを自動的に収集します。アプリのほとんどのネットワーク リクエストが対象となりますが、一部のリクエストは報告されない可能性があります。Performance Monitoring に特定のネットワーク リクエストを含めるには、アプリに次のコードを追加します。

Swift
guard let metric = HTTPMetric(url: "https://www.google.com", httpMethod: .get) else { return }

metric.start()
guard let url = URL(string: "https://www.google.com") else { return }
let request: URLRequest = URLRequest(url:url)
let session = URLSession(configuration: .default)
let dataTask = session.dataTask(with: request) { (urlData, response, error) in
        if let httpResponse = response as? HTTPURLResponse {
         metric.responseCode = httpResponse.statusCode
        }
        metric.stop()
}
dataTask.resume()
Objective-C
@property (nonatomic) FIRHTTPMetric *metric;
...
- (void)beginManualNetworkInstrumentation {
  self.metric =
      [[FIRHttpMetric alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com"]
                              HTTPMethod:FIRHTTPMethodGET];

  [self.metric start];

  NSURLRequest *request =
      [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.google.com"]];
  NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                                delegate:self];
  [connection resume];
}

- (void)connection:(NSURLConnection *)connection
    didReceiveResponse:(NSURLResponse *) response {
  NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response
  self.metric.responseCode = httpResponse.statusCode;
  [self.metric stop];
}

この方法で個別にキャプチャした HTTP/s ネットワーク リクエストは、Performance Monitoring で自動的にキャプチャされたネットワーク リクエストとともに Firebase コンソールに表示されます。

既知の問題

  • Performance Monitoring には、GTMSQLite との互換性に関する既知の問題があります。GTMSQLite を使用するアプリでは、Performance Monitoring を使用しないことをおすすめします。
  • FirebaseApp.configure() を呼び出した後のメソッドの実装入れ替えは、Performance Monitoring SDK に影響する可能性があります。
  • iOS 8.0~8.2 シミュレータの既知の問題により、Performance Monitoring でパフォーマンス イベントがキャプチャされなくなります。これらの問題は、iOS シミュレータ 8.3 以降のバージョンで修正されています。
  • NSURLSession の backgroundSessionConfiguration を使用して接続を確立する場合、接続時間が予想よりも長くかかります。この場合の接続はプロセスの外部で実行され、そのタイミングはプロセス内のコールバック イベントを反映したものになります。

次のステップ

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。