停用 Firebase Performance Monitoring SDK

要允许用户选择是否使用 Firebase 性能监控,您需要对您的应用进行配置,以便您能启用和停用性能监控。这在应用开发和测试期间可能也有用。

您可以在构建应用时停用 Performance Monitoring SDK 并提供在运行时重新启用该 SDK 的选项;也可以在构建应用时启用性能监控并提供在运行时停用该 SDK 的选项(使用 Firebase 远程配置)。您还可以完全停用性能监控,不提供在运行时启用它的选项。

在应用构建过程中停用性能监控

在应用构建过程中停用性能监控的一个用处是,避免在应用开发和测试期间报告非正式版应用的性能数据。

iOS

您可以将两个键中的其中一个添加到 iOS 应用的属性列表文件 (Info.plist),以暂时或完全停用性能监控:

  • 要停用性能监控但允许您的应用在运行时将其启用,请在您应用的 Info.plist 文件中将 firebase_performance_collection_enabled 设为 true
  • 要完全停用性能监控且不允许在运行时将其启用,请在您应用的 Info.plist 文件中将 firebase_performance_collection_deactivated 设为 true。此设置会覆盖 firebase_performance_collection_enabled 设置,并且您必须将其从您应用的 Info.plist 文件中移除,才能重新启用性能监控。

Android

您可以将以下属性添加到应用的 gradle.properties 文件中,以在构建时停用自动跟踪记录和 HTTP/HTTPS 网络请求监控(但不包括自定义跟踪记录):

firebasePerformanceInstrumentationEnabled=false

将此属性更改为 true 可重新启用自动跟踪记录和 HTTP/HTTPS 网络请求监控。

您还可以在构建时停用性能监控,但允许您的应用在运行时将其启用,方法是向应用的 AndroidManifest.xml 文件的 <application> 元素添加一个 <meta-data> 元素,如下所示:

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

要完全停用性能监控且不允许在运行时将其启用,请向应用的 AndroidManifest.xml 文件的 <application> 元素添加一个 <meta-data> 元素,如下所示:

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

使用远程配置在运行时停用您的应用

您可以使用远程配置更改应用的行为和外观,因此,要为您的应用的已部署实例停用性能监控,利用远程配置是一种理想的方式。

iOS

您可以使用下方所示的示例代码,在您的 iOS 应用下次启动时停用性能监控数据收集。要了解关于在 iOS 应用中使用远程配置的详情,请参阅在 iOS 上使用 Firebase 远程配置

  1. 确保在您的 Podfile 中添加远程配置: pod 'Firebase/RemoteConfig'
  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 或应用使用的其他实现文件中添加以下代码,以提取并激活远程配置值:

    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 控制台中停用性能监控,请在应用项目中创建 perf_disable 参数,然后将其值设为 true。如果将 perf_disable 的值设置为 false,则性能监控将保持启用状态。

单独停用自动或手动数据收集

您可以对上面显示的代码和 Firebase 控制台进行一些更改,以便单独停用自动数据收集(应用启动跟踪记录和 HTTP/HTTPS 网络请求),而不停用手动数据收集(自定义跟踪记录)。为此,您应该在 application:didFinishLaunchingWithOptions: 实例方法的 launchOptions 语句中添加以下代码,而不是上面第 3 步中显示的内容:

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/HTTPS 网络监控,请在应用项目中创建 perf_disable_auto 参数,然后将其值设为 true
  • 要停用自定义跟踪记录,请在应用项目中创建 perf_disable_manual 参数,然后将其值设为 true

要在应用中启用性能监控的这两个方面之一,请在 Firebase 控制台中将相应参数的值设置为 false

Android

您可以使用下方所示的示例代码,在您的 Android 应用下次启动时停用性能监控数据收集。要了解关于在 Android 应用中使用远程配置的详情,请参阅在 Android 上使用 Firebase 远程配置

  1. 确保在您的模块 Gradle 文件(通常是 app/build.gradle)的 dependencies 部分中添加远程配置:

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

  2. 接下来设置远程配置,并在 perf_disable 设置为 true 时停用性能监控:

    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 以获取并激活远程配置值:

    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 控制台中停用性能监控,请在应用项目中创建 perf_disable 参数,然后将其值设为 true。此更改会使对 Performance Monitoring SDK 的调用成为“空操作”调用 (NOOP),从而消除在应用中使用 Performance Monitoring SDK 对您的应用性能造成的显著影响。如果将 perf_disable 的值设置为 false,则性能监控将保持启用状态。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面