Firebase Performance Monitoring SDK を無効にする

ユーザーが Firebase Performance Monitoring の使用をオプトインまたはオプトアウトできるようにするには、Performance Monitoring の有効、無効を切り替えられるようにアプリを設定します。この機能はアプリの開発やテストの際にも役立つ場合があります。

アプリをビルドする際に Performance Monitoring SDK を無効にし、ランタイム時に必要に応じて再度有効にできるようにすることができます。また、Performance Monitoring を有効にした状態でアプリをビルドし、ランタイム時に Firebase Remote Config を使用して Performance Monitoring を無効にすることもできます。さらに、Performance Monitoring を完全に作動不能にし、ランタイム時に再度有効にできないようにすることも可能です。

アプリのビルドプロセス中に Performance Monitoring を無効にする

アプリのビルドプロセス中に Performance Monitoring を無効にした方がよい状況の一例としては、アプリのリリース前バージョンの開発またはテスト中にアプリからパフォーマンス データが報告されないようにする場合が挙げられます。

iOS

iOS アプリのプロパティ リストファイル(Info.plist)に次の 2 つのキーのいずれかを追加することで、Performance Monitoring を無効または作動不能にすることができます。

  • Performance Monitoring をビルド時に無効にし、ランタイム時に再度有効にできるようにするには、アプリの Info.plist ファイルで firebase_performance_collection_enabledtrue に設定します。
  • Performance Monitoring を完全に作動不能にし、ランタイム時に有効にできないようにするには、アプリの Info.plist ファイルで firebase_performance_collection_deactivatedtrue に設定します。この設定は firebase_performance_collection_enabled の設定より優先されます。Performance Monitoring を再度有効にするには、アプリの Info.plist ファイルからこの設定を削除する必要があります。

Android

アプリの gradle.properties ファイルに次のプロパティを追加することで、ビルド時に自動トレースと HTTP/S ネットワーク リクエストのモニタリング(ただし、カスタム トレースは除く)を無効にすることができます。

firebasePerformanceInstrumentationEnabled=false

このプロパティを true に変更すると、自動トレースと HTTP/S ネットワーク リクエストのモニタリングが再度有効になります。

Performance Monitoring をビルド時に無効にし、ランタイム時に再度有効にできるようにするため、次のようにアプリの AndroidManifest.xml ファイルの <application> 要素に <meta-data> 要素を追加することもできます。

<meta-data
  android:name="firebase_performance_collection_enabled"
  android:value="false" />

Performance Monitoring を完全に作動不能にし、ランタイム時に有効にできないようにするには、次のようにアプリの AndroidManifest.xml ファイルの <application> 要素に <meta-data> 要素を追加します。

<meta-data
  android:name="firebase_performance_collection_deactivated"
  android:value="true" />

ランタイム時に Remote Config を使用してアプリを無効にする

Remote Config を使用するとアプリの動作や外観を変更できます。そのため、これはアプリのデプロイされたインスタンスで Performance Monitoring を無効にするのに最適な方法です。

iOS

下記のサンプルコードを使用して、次回 iOS アプリが起動したときに Performance Monitoring データの収集を無効にすることができます。iOS アプリで Remote Config を使用する方法について詳しくは、Firebase Remote Config を iOS で使用するをご覧ください。

  1. Podfile に 'Firebase/RemoteConfig' を追加して、Remote Config が使用されるようにします。
  2. アプリの AppDelegate ファイルの一番上に次の行を追加します。

    Swift

    import FirebaseRemoteConfig

    Objective-C

    @import FirebaseRemoteConfig;

  3. AppDelegate ファイルで、application:didFinishLaunchingWithOptions: インスタンス メソッドの launchOptions ステートメントに次のコードを追加します。

    Swift

    remoteConfig = RemoteConfig.remoteConfig()
    // You can change the "false" below to "true" to permit more fetches when validating
    // your app, but you should change it back to "false" or remove this statement before
    // distributing your app in production.
    let remoteConfigSettings = RemoteConfigSettings(developerModeEnabled: false)
    remoteConfig.configSettings = remoteConfigSettings!
    // Load in-app defaults from a plist file that sets perf_disable to false until
    // you update values in the Firebase Console.
    remoteConfig.setDefaultsFromPlistFileName("RemoteConfigDefaults")
    // Important! This needs to be applied before FirebaseApp.configure()
    if !remoteConfig["perf_disable"].boolValue {
        // The following line disables automatic traces and HTTP/S network monitoring
        Performance.sharedInstance().isInstrumentationEnabled = false
        // The following line disables custom traces
        Performance.sharedInstance().isDataCollectionEnabled = false
    }
    else {
        Performance.sharedInstance().isInstrumentationEnabled = true
        Performance.sharedInstance().isDataCollectionEnabled = true
    }
    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    self.remoteConfig = [FIRRemoteConfig remoteConfig];
    // You can change the NO below to YES to permit more fetches when validating
    // your app, but you should change it back to NO or remove this statement before
    // distributing your app in production.
    FIRRemoteConfigSettings *remoteConfigSettings =
        [[FIRRemoteConfigSettings alloc] initWithDeveloperModeEnabled:NO];
    self.remoteConfig.configSettings = remoteConfigSettings;
    // Load in-app defaults from a plist file that sets perf_disable to false until
    // you update values in the Firebase Console.
    [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];
    // Important! This needs to be applied before [FIRApp configure]
    if (!self.remoteConfig[@"perf_disable"].numberValue.boolValue) {
        // The following line disables automatic traces and HTTP/S network monitoring
        [FIRPerformance sharedInstance].instrumentationEnabled = NO;
        // The following line disables custom traces
        [FIRPerformance sharedInstance].dataCollectionEnabled = NO;
    }
    else {
        [FIRPerformance sharedInstance].instrumentationEnabled = YES;
        [FIRPerformance sharedInstance].dataCollectionEnabled = YES;
    }
    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  4. ViewController.m、またはアプリで使用する別の実装ファイルに次のコードを追加し、Remote Config の値をフェッチして有効にします。

    Swift

    //RemoteConfig fetch and activation in your app, shortly after startup
    remoteConfig.fetch(withExpirationDuration: TimeInterval(30.0)) { (status, error) -> Void in
      if status == .success {
        print("Config fetched!")
        self.remoteConfig.activateFetched()
      } else {
        print("Config not fetched")
        print("Error \(error!.localizedDescription)")
      }
    }

    Objective-C

    //RemoteConfig fetch and activation in your app, shortly after startup
    [self.remoteConfig fetchWithExpirationDuration:30.0 completionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
      if (status == FIRRemoteConfigFetchStatusSuccess) {
        NSLog(@"Config fetched!");
        [self.remoteConfig activateFetched];
      } else {
        NSLog(@"Config not fetched");
        NSLog(@"Error %@", error.localizedDescription);
      }
    }];
  5. Firebase コンソールで Performance Monitoring を無効にするには、アプリのプロジェクトで perf_disable パラメータを作成し、その値を true に設定します。perf_disable の値を false に設定した場合、Performance Monitoring は引き続き有効になります。

自動または手動のデータ収集を個別に無効にする

上記のコードを一部変更することにより、Firebase コンソールで自動データ収集(アプリ起動トレースと HTTP/S ネットワーク リクエスト)と手動データ収集(カスタム トレース)を個別に無効にすることができます。そのためには、上記の手順 3 で、application:didFinishLaunchingWithOptions: インスタンス メソッドの launchOptions ステートメントに次のコードを追加します。

Swift

remoteConfig = FIRRemoteConfig.remoteConfig()
let remoteConfigSettings = FIRRemoteConfigSettings(developerModeEnabled: true)
remoteConfig.configSettings = remoteConfigSettings!
// Important! This needs to be applied before FirebaseApp.configure()
if remoteConfig["perf_disable_auto"].boolValue {
    // The following line disables automatic traces and HTTP/S network monitoring
    Performance.sharedInstance().isInstrumentationEnabled = false
}
else {
    Performance.sharedInstance().isInstrumentationEnabled = true
}
if remoteConfig["perf_disable_manual"].boolValue {
    // The following line disables custom traces
    Performance.sharedInstance().isDataCollectionEnabled = false
}
else {
    Performance.sharedInstance().isDataCollectionEnabled = true
}
// Use Firebase library to configure APIs
FirebaseApp.configure()

Objective-C

self.remoteConfig = [FIRRemoteConfig remoteConfig];
FIRRemoteConfigSettings *remoteConfigSettings =
    [[FIRRemoteConfigSettings alloc] initWithDeveloperModeEnabled:YES];
self.remoteConfig.configSettings = remoteConfigSettings;
// Important! This needs to be applied before [FirebaseApp configure]
if (self.remoteConfig[@"perf_disable_auto"].numberValue.boolValue) {
    // The following line disables automatic traces and HTTP/S network monitoring
    [FIRPerformance sharedInstance].instrumentationEnabled = NO;
}
else {
    [FIRPerformance sharedInstance].instrumentationEnabled = YES;
}
if (self.remoteConfig[@"perf_disable_manual"].numberValue.boolValue) {
    // The following line disables custom traces
    [FIRPerformance sharedInstance].dataCollectionEnabled = NO;
}
else {
    [FIRPerformance sharedInstance].dataCollectionEnabled = YES;
}
// Use Firebase library to configure APIs
[FirebaseApp configure];

これにより、Firebase コンソールで次の操作ができます。

  • 自動トレースと HTTP/S ネットワークのモニタリングを無効にするには、アプリのプロジェクトで perf_disable_auto パラメータを作成し、その値を true に設定します。
  • カスタム トレースを無効にするには、アプリのプロジェクトで perf_disable_manual パラメータを作成し、その値を true に設定します。

これらのどちらかのモニタリングをアプリで有効にするには、Firebase コンソールで対応するパラメータの値を false に設定します。

Android

下記のサンプルコードを使用して、次回 Android アプリが起動したときに Performance Monitoring データの収集を無効にすることができます。Android アプリで Remote Config を使用する方法について詳しくは、Firebase Remote Config を Android で使用するをご覧ください。

  1. モジュールの Gradle ファイル(通常は app/build.gradle)の dependencies セクションに次の記述を追加して、Remote Config が使用されるようにします。

    implementation 'com.google.firebase:firebase-config:16.1.0'

  2. 次に Remote Config を設定し、perf_disabletrue に設定されている場合は Performance Monitoring を無効にします。

    Java

    // Setup remote config
    FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    
    // You can uncomment the following two statements to permit more fetches when
    // validating your app, but you should comment out or delete these lines before
    // distributing your app in production.
    // FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
    //       .setDeveloperModeEnabled(BuildConfig.DEBUG)
    //       .build();
    // mFirebaseRemoteConfig.setConfigSettings(configSettings);
    // Load in-app defaults from an XML file that sets perf_disable to false until you update
    // values in the Firebase Console
    
    //Observe the remote config parameter "perf_disable" and disable Performance Monitoring if true
    config.setDefaults(R.xml.remote_config_defaults);
    if (config.getBoolean("perf_disable")) {
        FirebasePerformance.getInstance().setPerformanceCollectionEnabled(false);
    } else {
        FirebasePerformance.getInstance().setPerformanceCollectionEnabled(true);
    }
    
  3. 最後に MainActivity.java に次のコードを追加し、Remote Config の値をフェッチして有効にします。

    Java

    //Remote Config fetches and activates parameter values from the service
    final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    config.fetch(3600)
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        config.activateFetched();
                    } else {
                        // ...
                    }
                }
            });
    
  4. Firebase コンソールで Performance Monitoring を無効にするには、アプリのプロジェクトで perf_disable パラメータを作成し、その値を true に設定します。このように変更すると、Performance Monitoring SDK の呼び出しが「ノー オペレーション」(NOOPs)呼び出しとなり、Performance Monitoring SDK の使用によるアプリのパフォーマンス低下がなくなります。perf_disable の値を false に設定した場合、Performance Monitoring は引き続き有効になります。

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

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