Firebase Remote Config'i kullanmaya başlayın


Uygulamanızda parametreler tanımlamak ve bu parametrelerin değerlerini bulutta güncellemek için Firebase Remote Config kullanabilirsiniz. Böylece, uygulama güncellemesi dağıtmadan uygulamanızın görünümünü ve davranışını değiştirebilirsiniz. Bu kılavuz, başlamak için gereken adımları açıklar ve bazı örnek kodlar sunar. Bu kodların tümü, firebase/quickstart-ios GitHub deposundan klonlanabilir veya indirilebilir.

1. adım: Uygulamanıza Remote Config ekleyin

  1. Henüz yapmadıysanız Firebase'i Apple projenize ekleyin.

  2. Remote Config için, uygulama örneklerinin kullanıcı özelliklerine ve kitlelere koşullu olarak hedeflenmesi amacıyla Google Analytics gereklidir. Projenizde Google Analytics'ı etkinleştirdiğinizdenGoogle Analytics emin olun.

  3. Aşağıdaki örnekte gösterildiği gibi tekil Remote Config nesnesini oluşturun:

    Swift

    remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 0
    remoteConfig.configSettings = settings

    Objective-C

    self.remoteConfig = [FIRRemoteConfig remoteConfig];
    FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
    remoteConfigSettings.minimumFetchInterval = 0;
    self.remoteConfig.configSettings = remoteConfigSettings;

Bu nesne, uygulama içi varsayılan parametre değerlerini depolamak, güncellenmiş parametre değerlerini Remote Config arka ucundan getirmek ve getirilen değerlerin uygulamanızda ne zaman kullanılabileceğini kontrol etmek için kullanılır.

Geliştirme sırasında, nispeten düşük bir minimum getirme aralığı ayarlamanız önerilir. Daha fazla bilgi için Sınırlama bölümüne bakın.

2. adım: Uygulama içi varsayılan parametre değerlerini ayarlayın

Uygulamanız Remote Config arka ucuna bağlanmadan önce amaçlandığı gibi davranması ve arka uçta ayarlanmamışsa varsayılan değerlerin kullanılabilmesi için uygulama içi varsayılan parametre değerlerini Remote Config nesnesinde ayarlayabilirsiniz.

  1. NSDictionary nesnesi veya plist dosyası kullanarak bir dizi parametre adı ve varsayılan parametre değeri tanımlayın.

    Remote ConfigArka uç parametre değerlerini zaten yapılandırdıysanız tüm varsayılan değerleri içeren oluşturulmuş bir plist dosyasını indirebilir ve Xcode projenize kaydedebilirsiniz.

    REST

    curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=PLIST -o RemoteConfigDefaults.plist
    

    Firebase konsolu

    1. Parametreler sekmesinde Menü'yü açın ve Varsayılan değerleri indir'i seçin.

    2. İstendiğinde iOS için.plist'i etkinleştirin, ardından Dosyayı indir'i tıklayın.

  2. setDefaults: kullanarak bu değerleri Remote Config nesnesine ekleyin. Aşağıdaki örnekte, bir plist dosyasından uygulama içi varsayılan değerler ayarlanmaktadır:

    Swift

    remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

    Objective-C

    [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

3. adım: Uygulamanızda kullanmak için parametre değerleri edinin

Artık Remote Config nesnesinden parametre değerleri alabilirsiniz. Daha sonra Remote Config arka ucunda değerler ayarlarsanız, bu değerleri getirip etkinleştirdiğinizde uygulamanızda kullanılabilir. Aksi takdirde, setDefaults: kullanılarak yapılandırılan uygulama içi parametre değerlerini alırsınız. Bu değerleri almak için parametre anahtarını bağımsız değişken olarak sağlayarak configValueForKey: yöntemini çağırın.

let remoteConfig = RemoteConfig.remoteConfig()

// Retrieve a parameter value using configValueForKey
let welcomeMessageValue = remoteConfig.configValue(forKey: "welcome_message")
let welcomeMessage = welcomeMessageValue.stringValue

let featureFlagValue = remoteConfig.configValue(forKey: "new_feature_flag")
let isFeatureEnabled = featureFlagValue.boolValue

Bu değerlere Swift'te erişmenin daha okunabilir ve kolay bir yolu, Swift'in alt simge gösterimini kullanmaktır:

let remoteConfig = RemoteConfig.remoteConfig()

// Retrieve a string parameter value
let welcomeMessage = remoteConfig["welcome_message"].stringValue

// Retrieve a boolean parameter value
let isFeatureEnabled = remoteConfig["new_feature_flag"].boolValue

// Retrieve a number parameter value
let maxItemCount = remoteConfig["max_items"].numberValue.intValue

Tür güvenli yapılandırma için Codable'ı kullanma

Daha karmaşık yapılandırmalar için Codable protokolünü kullanarak Remote Config'dan gelen yapılandırılmış verilerin kodunu çözebilirsiniz. Bu, tür güvenli yapılandırma yönetimi sağlar ve karmaşık nesnelerle çalışmayı kolaylaştırır.

// Define a Codable struct for your configuration
struct AppFeatureConfig: Codable {
  let isNewFeatureEnabled: Bool
  let maxUploadSize: Int
  let themeColors: [String: String]
}

// Fetch and decode the configuration
func configureAppFeatures() {
  let remoteConfig = RemoteConfig.remoteConfig()
  remoteConfig.fetchAndActivate { status, error in
    guard error == nil else { return }

    do {
      let featureConfig = try remoteConfig["app_feature_config"].decoded(asType: AppFeatureConfig.self)
      configureApp(with: featureConfig)
    } catch {
      // Handle decoding errors
      print("Failed to decode configuration: \(error)")
    }
  }
}

Bu yöntemle şunları yapabilirsiniz:

  • Karmaşık yapılandırma yapılarını tanımlayın.
  • JSON yapılandırmalarını otomatik olarak ayrıştırır.
  • Remote Config değerlerine erişirken tür güvenliğini sağlayın.
  • Yapılandırılmış şablonları Remote Config işlemek için temiz ve okunabilir kod sağlayın.

SwiftUI'da bildirim temelli yapılandırma için özellik sarmalayıcılarını kullanma

Özellik sarmalayıcıları, özellik bildirimlerine özel davranış eklemenize olanak tanıyan güçlü bir Swift özelliğidir. SwiftUI'da, durum, bağlamalar ve diğer özellik davranışlarını yönetmek için özellik sarmalayıcıları kullanılır. Daha fazla bilgi için Swift Dil Kılavuzu'na bakın.

struct ContentView: View {
  @RemoteConfigProperty(key: "cardColor", fallback: "#f05138")
  var cardColor

  var body: some View {
    VStack {
      Text("Dynamic Configuration")
        .background(Color(hex: cardColor))
    }
    .onAppear {
      RemoteConfig.remoteConfig().fetchAndActivate()
    }
  }
}

Varsayılan değerler için yerleşik destek ve basitleştirilmiş yapılandırma yönetimiyle SwiftUI'da Remote Config değerlerine erişmek için bildirimsel bir yol istediğinizde @RemoteConfigProperty özellik sarmalayıcısını kullanın.

4. adım: Parametre değerlerini ayarlayın

Firebase konsolunu veya Remote Config arka uç API'lerini kullanarak, uygulama içi değerleri istediğiniz koşullu mantığa veya kullanıcı hedeflemeye göre geçersiz kılan yeni arka uç varsayılan değerleri oluşturabilirsiniz. Bu bölümde, bu değerleri oluşturmak için Firebase konsol adımları açıklanmaktadır.

  1. Firebase konsolunda projenizi açın.
  2. Remote Config kontrol panelini görüntülemek için menüden Remote Config simgesini seçin.
  3. Uygulamanızda tanımladığınız parametrelerle aynı ada sahip parametreler tanımlayın. Her parametre için bir varsayılan değer (bu değer, uygulama içi varsayılan değeri geçersiz kılar) ve koşullu değerler ayarlayabilirsiniz. Daha fazla bilgi edinmek için Remote Config Parametreler ve Koşullar başlıklı makaleyi inceleyin.
  4. Özel sinyal koşulları kullanıyorsanız özellikleri ve değerlerini tanımlayın. Aşağıdaki örneklerde, özel sinyal koşulunun nasıl tanımlanacağı gösterilmektedir.

    Swift

      Task {
          let customSignals: [String: CustomSignalValue?] = [
          "city": .string("Tokyo"),
          "preferred_event_category": .string("sports")
        ]
    
        do {
          try await remoteConfig.setCustomSignals(customSignals)
          print("Custom signals set successfully!")
          } catch {
              print("Error setting custom signals: \(error)")
          }
    }

    Objective-C

      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSDictionary *customSignals = @{
          @"city": @"Tokyo",
          @"preferred_event_category": @"sports"
        };
    
        [self.remoteConfig setCustomSignals:customSignals withCompletion:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"Error setting custom signals: %@", error);
            } else {
                NSLog(@"Custom signals set successfully!");
            }
      }];
    });

5. adım: Değerleri getirin ve etkinleştirin

Remote Config kaynağından parametre değerlerini getirmek için fetchWithCompletionHandler: veya fetchWithExpirationDuration:completionHandler: yöntemini çağırın. Arka uçta ayarladığınız tüm değerler getirilip Remote Config nesnesinde önbelleğe alınır.

Değerleri tek bir çağrıda getirmek ve etkinleştirmek istediğiniz durumlarda fetchAndActivateWithCompletionHandler: kullanın.

Bu örnek, Remote Config arka ucundan (önbelleğe alınmamış değerler) değerleri getirir ve bunları uygulamada kullanılabilir hale getirmek için activateWithCompletionHandler: işlevini çağırır:

Swift

remoteConfig.fetch { (status, error) -> Void in
  if status == .success {
    print("Config fetched!")
    self.remoteConfig.activate { changed, error in
      // ...
    }
  } else {
    print("Config not fetched")
    print("Error: \(error?.localizedDescription ?? "No error available.")")
  }
  self.displayWelcome()
}

Objective-C

[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
    if (status == FIRRemoteConfigFetchStatusSuccess) {
        NSLog(@"Config fetched!");
      [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
        if (error != nil) {
          NSLog(@"Activate error: %@", error.localizedDescription);
        } else {
          dispatch_async(dispatch_get_main_queue(), ^{
            [self displayWelcome];
          });
        }
      }];
    } else {
        NSLog(@"Config not fetched");
        NSLog(@"Error %@", error.localizedDescription);
    }
}];

Bu güncellenen parametre değerleri, uygulamanızın davranışını ve görünümünü etkilediğinden, getirilen değerleri kullanıcınız için sorunsuz bir deneyim sağlayacak bir zamanda (ör. kullanıcı uygulamanızı bir sonraki açtığında) etkinleştirmeniz gerekir. Daha fazla bilgi ve örnek için Remote Config yükleme stratejileri başlıklı makaleyi inceleyin.

6. adım: Güncellemeleri anlık olarak dinleyin

Parametre değerlerini getirdikten sonra, Remote Config arka ucundan gelen güncellemeleri dinlemek için gerçek zamanlı Remote Config'yı kullanabilirsiniz. Güncellemeler kullanıma sunulduğunda bağlı cihazlara Remote Configanlık sinyaller gönderir ve yeni bir sürüm yayınladıktan sonra değişiklikleri otomatik olarak getirir.Remote Config

Anlık güncellemeler, Firebase SDK'sının Apple platformlar için 10.7.0 ve sonraki sürümlerinde desteklenir.

  1. Uygulamanızda, güncellemeleri dinlemeye başlamak ve yeni veya güncellenmiş parametre değerlerini otomatik olarak getirmek için addOnConfigUpdateListener işlevini çağırın. Aşağıdaki örnek, güncellemeleri dinler ve activateWithCompletionHandler çağrıldığında güncellenmiş bir karşılama mesajı göstermek için yeni getirilen değerleri kullanır.

    Swift

    remoteConfig.addOnConfigUpdateListener { configUpdate, error in
      guard let configUpdate, error == nil else {
        print("Error listening for config updates: \(error)")
      }
    
      print("Updated keys: \(configUpdate.updatedKeys)")
    
      self.remoteConfig.activate { changed, error in
        guard error == nil else { return self.displayError(error) }
        DispatchQueue.main.async {
          self.displayWelcome()
        }
      }
    }

    Objective-C

    __weak __typeof__(self) weakSelf = self;
    [self.remoteConfig addOnConfigUpdateListener:^(FIRRemoteConfigUpdate * _Nonnull configUpdate, NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error listening for config updates %@", error.localizedDescription);
      } else {
        NSLog(@"Updated keys: %@", configUpdate.updatedKeys);
    
        __typeof__(self) strongSelf = weakSelf;
        [strongSelf.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Activate error %@", error.localizedDescription);
          }
    
          dispatch_async(dispatch_get_main_queue(), ^{
            [strongSelf displayWelcome];
          });
        }];
      }
    }];
  2. Bir sonraki Remote Config sürümünü yayınladığınızda, uygulamanızı çalıştıran ve değişiklikleri dinleyen cihazlar tamamlama işleyicisini çağırır.

Kısıtlama

Bir uygulama kısa süre içinde çok fazla kez getirme işlemi yaparsa getirme çağrıları sınırlandırılır ve SDK FIRRemoteConfigFetchStatusThrottled değerini döndürür. SDK'nın 6.3.0 sürümünden önce, 60 dakikalık bir süre içinde 5 getirme isteği sınırı vardı (daha yeni sürümlerde daha izin verici sınırlar vardır).

Uygulama geliştirme sırasında,uygulamanızı geliştirip test ederken hızlı bir şekilde yineleme yapabilmek için önbelleği çok sık (saatte birçok kez) yenilemek üzere daha sık getirme işlemi yapmak isteyebilirsiniz. Yapılandırma sunucuda güncellendiğinde anlık Remote Config güncellemeleri önbelleği otomatik olarak atlar. Çok sayıda geliştiricinin çalıştığı bir projede hızlı yinelemeyi desteklemek için uygulamanıza düşük minimum getirme aralığına (MinimumFetchInterval) sahip geçici bir FIRRemoteConfigSettings mülk ekleyebilirsiniz.

Remote Config için varsayılan ve önerilen üretim getirme aralığı 12 saattir. Bu, kaç getirme çağrısı yapıldığına bakılmaksızın yapılandırmaların 12 saatlik bir pencerede arka uçtan birden fazla kez getirilmeyeceği anlamına gelir. Daha net bir ifadeyle, minimum getirme aralığı aşağıdaki sırayla belirlenir:

  1. fetch(long) içindeki parametre
  2. FIRRemoteConfigSettings.MinimumFetchInterval içindeki parametre
  3. Varsayılan değer 12 saattir.

Sonraki adımlar

Henüz yapmadıysanız Remote Config kullanım alanlarını inceleyin ve aşağıdakiler de dahil olmak üzere bazı temel kavramlar ile gelişmiş stratejilerle ilgili dokümanlara göz atın: