停用 Firebase Performance Monitoring


如要讓使用者選擇是否使用 Firebase Performance Monitoring,您可能需要設定應用程式,以便啟用及停用 Performance Monitoring。您可能也會發現,這項功能在應用程式開發和測試期間相當實用。

以下是一些可考慮的選項:

  • 您可以在建構應用程式時停用 Performance Monitoring SDK,並選擇在執行階段重新啟用。

  • 您可以使用已啟用的 Performance Monitoring SDK 建構應用程式,但也可以選擇在執行階段使用 Firebase Remote Config 停用 SDK。

  • 您可以完全停用 Performance Monitoring SDK,且無法在執行階段啟用。

在應用程式建構程序中停用 Performance Monitoring

在應用程式建構程序中停用 Performance Monitoring 可能有用的情況之一,就是在應用程式開發和測試期間,避免回報應用程式預發布版本的成效資料。

如要停用或停用 Performance Monitoring,您可以為 Apple 應用程式在屬性清單檔案 (Info.plist) 中新增下列兩個鍵之一:

  • 如要停用 Performance Monitoring,但允許應用程式在執行階段啟用,請在應用程式的 Info.plist 檔案中將 firebase_performance_collection_enabled 設為 false

  • 如要完全停用 Performance Monitoring,且在執行階段沒有啟用選項,請在應用程式的 Info.plist 檔案中將 firebase_performance_collection_deactivated 設為 true

使用 Remote Config 在執行階段停用應用程式

Firebase Remote Config 可讓您變更應用程式的行為和外觀,因此是您在應用程式部署例項中停用 Performance Monitoring 的理想方式。

如要在下次啟動 Apple 應用程式時停用 Performance Monitoring 資料收集功能,請使用下方的程式碼範例。如要進一步瞭解如何在 Apple 應用程式中使用 Remote Config,請參閱「在 Apple 平台上使用 Firebase Remote Config」。

  1. 請確認 Podfile 使用 Remote Config

    pod 'Firebase/RemoteConfig'
    
  2. 將下列程式碼新增至應用程式的 AppDelegate 檔案頂端:

    Swift

    注意:這項 Firebase 產品不適用於 macOS、Mac Catalyst 和 watchOS 目標。
    import FirebaseRemoteConfig
    

    Objective-C

    注意:這項 Firebase 產品不適用於 macOS、Mac Catalyst 和 watchOS 目標。
    @import FirebaseRemoteConfig;
    
  3. AppDelegate 檔案中,將下列程式碼新增至 application:didFinishLaunchingWithOptions: 例項方法中的 launchOptions 陳述式:

    Swift

    注意:這項產品不適用於 macOS、Mac Catalyst 和 watchOS 目標。
    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 all automatic (out-of-the-box) monitoring
        Performance.sharedInstance().isInstrumentationEnabled = false
        // The following line disables all custom monitoring
        Performance.sharedInstance().isDataCollectionEnabled = false
    }
    else {
        Performance.sharedInstance().isInstrumentationEnabled = true
        Performance.sharedInstance().isDataCollectionEnabled = true
    }
    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    注意:這項 Firebase 產品不適用於 macOS、Mac Catalyst 和 watchOS 目標。
    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 all automatic (out-of-the-box) monitoring
        [FIRPerformance sharedInstance].instrumentationEnabled = NO;
        // The following line disables all custom monitoring
        [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

    注意:這項 Firebase 產品不適用於 macOS、Mac Catalyst 和 watchOS 目標。
    //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

    注意:這項 Firebase 產品不適用於 macOS、Mac Catalyst 和 watchOS 目標。
    //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 的值設為 falsePerformance Monitoring 仍會保持啟用狀態。

分別停用自動或自訂資料收集功能

您可以對上述程式碼和 Firebase 主控台中的程式碼進行一些變更,讓您可以分別停用所有自動 (即時) 監控和自訂監控。

  1. 將以下程式碼新增至 application:didFinishLaunchingWithOptions: 例項方法中的 launchOptions 陳述式 (而非上述同一個例項方法的陳述式):

    Swift

    注意:這項 Firebase 產品不適用於 macOS、Mac Catalyst 和 watchOS 目標。
    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 all automatic (out-of-the-box) monitoring
        Performance.sharedInstance().isInstrumentationEnabled = false
    }
    else {
        Performance.sharedInstance().isInstrumentationEnabled = true
    }
    if remoteConfig["perf_disable_manual"].boolValue {
        // The following line disables all custom monitoring
        Performance.sharedInstance().isDataCollectionEnabled = false
    }
    else {
        Performance.sharedInstance().isDataCollectionEnabled = true
    }
    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    注意:這項 Firebase 產品不適用於 macOS、Mac Catalyst 和 watchOS 目標。
    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 all automatic (out-of-the-box) monitoring
        [FIRPerformance sharedInstance].instrumentationEnabled = NO;
    }
    else {
        [FIRPerformance sharedInstance].instrumentationEnabled = YES;
    }
    if (self.remoteConfig[@"perf_disable_manual"].numberValue.boolValue) {
        // The following line disables all custom monitoring
        [FIRPerformance sharedInstance].dataCollectionEnabled = NO;
    }
    else {
        [FIRPerformance sharedInstance].dataCollectionEnabled = YES;
    }
    // Use Firebase library to configure APIs
    [FirebaseApp configure];
    
  2. Firebase 控制台中完成下列步驟:

    • 如要停用所有自動 (即時) 監控功能,請在應用程式專案中建立 perf_disable_auto 參數,然後將其值設為 true
    • 如要停用所有自訂監控功能,請在應用程式專案中建立 perf_disable_manual 參數,然後將其值設為 true