Firebase Performance Monitoring SDK を無効にする

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

アプリをビルドする際、ランタイム時に Performance Monitoring SDK を再度有効にできるオプションを設定したうえで、Performance Monitoring SDK を無効にできます。また、Performance Monitoring を有効にした状態でアプリをビルドし、ランタイム時に Firebase Remote Config を使用して Performance Monitoring を無効にすることもできます。さらに、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> 要素を追加することもできます。

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

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

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

ランタイム時に 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 が使用されるようにします。
    compile 'com.google.firebase:firebase-config:10.2.5'
  2. 次のクラスをアプリにインポートします。

    Java

    import com.google.android.gms.tasks.OnCompleteListener;
    import com.google.android.gms.tasks.Task;
    import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
    import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
    
  3. 次に Remote Config を設定し、perf_disabletrue に設定されている場合は Performance Monitoring を無効にします。

    Java

    //Setup remote config
    final FirebaseRemoteConfig mFirebaseRemoteConfig = 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
    mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);
    //Observe the remote config parameter "perf_disable" and disable Performance Monitoring if true
    if (mFirebaseRemoteConfig.getBoolean("perf_disable")) {
       FirebasePerformance.getInstance().setPerformanceCollectionEnabled(false);
    } else {
       FirebasePerformance.getInstance().setPerformanceCollectionEnabled(true);
    }
  4. 最後に MainActivity.java に次のコードを追加し、Remote Config の値をフェッチして有効にします。

    Java

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

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

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