השבתת מעקב אחר ביצועים ב-Firebase


כדי לאפשר למשתמשים להביע הסכמה או סירוב לשימוש ב-Firebase Performance Monitoring, כדאי להגדיר את האפליקציה כך שתוכלו להפעיל ולהשבית את Performance Monitoring. יכול להיות שהתכונה הזו תהיה שימושית גם במהלך פיתוח ובדיקה של אפליקציות.

ריכזנו כאן כמה אפשרויות שכדאי לקחת בחשבון:

  • אפשר להשבית את ה-SDK של Performance Monitoring בזמן פיתוח האפליקציה, עם אפשרות להפעיל אותו מחדש בזמן הריצה.

  • אפשר ליצור את האפליקציה עם ה-SDK של Performance Monitoring מופעל, אבל יש אפשרות להשבית אותו בזמן הריצה באמצעות Firebase Remote Config.

  • אפשר להשבית לחלוטין את ה-SDK של Performance Monitoring, ללא אפשרות להפעיל אותו בזמן הריצה.

השבתת Performance Monitoring במהלך תהליך ה-build של האפליקציה

מצב אחד שבו כדאי להשבית את Performance Monitoring במהלך תהליך ה-build של האפליקציה הוא כדי להימנע מהדיווח על נתוני ביצועים מגרסה של האפליקציה לפני השקתה, במהלך הפיתוח והבדיקה של האפליקציה.

כדי להשבית או להשבית באופן זמני את Performance Monitoring, אפשר להוסיף אחד משני מפתחות לקובץ רשימת המאפיינים (Info.plist) של האפליקציה ל-Apple:

  • כדי להשבית את Performance Monitoring, אבל לאפשר לאפליקציה להפעיל אותו בזמן הריצה, מגדירים את firebase_performance_collection_enabled לערך false בקובץ Info.plist של האפליקציה.

  • כדי להשבית את Performance Monitoring באופן מלא, ללא אפשרות להפעיל אותו במהלך זמן הריצה, צריך להגדיר את firebase_performance_collection_deactivated לערך true בקובץ Info.plist של האפליקציה.

השבתת האפליקציה בזמן הריצה באמצעות Remote Config

Firebase Remote Config מאפשר לבצע שינויים בהתנהגות ובמראה של האפליקציה, כך שהוא מספק דרך אידיאלית להשבית את Performance Monitoring במכונות הפרוסות של האפליקציה.

כדי להשבית את איסוף הנתונים של Performance Monitoring בפעם הבאה שהאפליקציה של Apple תופעל, צריך להשתמש בקוד לדוגמה שמופיע בהמשך. למידע נוסף על השימוש ב-Remote Config באפליקציה של Apple, ראו שימוש ב-Firebase Remote Config בפלטפורמות של Apple.

  1. מוודאים ש-Remote Config משמש ב-Podfile:

    pod 'Firebase/RemoteConfig'
    
  2. מוסיפים את הטקסט הבא לחלק העליון של קובץ AppDelegate של האפליקציה:

    Swift

    הערה: מוצר Firebase הזה לא זמין ביעדים של macOS,‏ Mac Catalyst ו-watchOS.
    import FirebaseRemoteConfig
    

    Objective-C

    הערה: מוצר Firebase הזה לא זמין ביעדים של macOS,‏ Mac Catalyst ו-watchOS.
    @import FirebaseRemoteConfig;
    
  3. בקובץ AppDelegate, מוסיפים את הקוד הבא להצהרות launchOptions ב-method של המופע application:didFinishLaunchingWithOptions::

    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. כדי להשבית את Performance Monitoring במסוף Firebase, יוצרים פרמטר perf_disable בפרויקט של האפליקציה ומגדירים את הערך שלו כ-true.

    אם מגדירים את הערך של perf_disable ל-false, Performance Monitoring יישאר מופעל.

השבתה נפרדת של איסוף נתונים אוטומטי או מותאם אישית

אפשר לבצע כמה שינויים בקוד שמוצג למעלה ובמסוף Firebase כדי להשבית את כל המעקב האוטומטי (המוכן לשימוש) בנפרד מהמעקב המותאם אישית.

  1. מוסיפים את הקוד הבא להצהרות launchOptions ב-method של המופע application:didFinishLaunchingWithOptions: (במקום מה שמוצג למעלה לאותו method של מופע):

    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.