با Firebase Remote Config شروع کنید


شما می توانید از Firebase Remote Config برای تعریف پارامترها در برنامه خود و به روز رسانی مقادیر آنها در فضای ابری استفاده کنید و به شما امکان می دهد ظاهر و رفتار برنامه خود را بدون توزیع به روز رسانی برنامه تغییر دهید. این راهنما شما را در مراحل شروع به کار راهنمایی می کند و نمونه کدی را ارائه می دهد که همگی برای شبیه سازی یا دانلود از مخزن firebase/quickstart-ios GitHub در دسترس هستند.

مرحله 1: Remote Config به برنامه خود اضافه کنید

  1. اگر قبلاً این کار را نکرده‌اید، Firebase را به پروژه اپل خود اضافه کنید .

  2. برای Remote Config ، Google Analytics برای هدف‌گیری مشروط نمونه‌های برنامه برای ویژگی‌های کاربر و مخاطبان مورد نیاز است. مطمئن شوید که Google Analytics در پروژه خود فعال کرده اید.

  3. همانطور که در مثال زیر نشان داده شده است، شی singleton Remote Config را ایجاد کنید:

    سویفت

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

    هدف-C

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

این شیء برای ذخیره مقادیر پارامترهای پیش‌فرض درون برنامه، واکشی مقادیر پارامترهای به‌روزشده از باطن Remote Config و کنترل زمانی که مقادیر واکشی شده در دسترس برنامه شما قرار می‌گیرند، استفاده می‌شود.

در طول توسعه، توصیه می شود حداقل فاصله واکشی نسبتاً کم را تنظیم کنید. برای اطلاعات بیشتر Throttling را ببینید.

مرحله 2: مقادیر پارامترهای پیش فرض درون برنامه را تنظیم کنید

می‌توانید مقادیر پارامترهای پیش‌فرض درون برنامه‌ای را در شی Remote Config تنظیم کنید، به طوری که برنامه شما قبل از اتصال به پشتیبان Remote Config همانطور که می‌خواهید رفتار کند، و اگر مقادیر پیش‌فرض در backend تنظیم نشده باشد، در دسترس باشند.

  1. مجموعه ای از نام پارامترها و مقادیر پارامترهای پیش فرض را با استفاده از یک شی NSDictionary یا یک فایل plist تعریف کنید.

    اگر قبلاً مقادیر پارامتر Backend Remote Config را پیکربندی کرده‌اید، می‌توانید یک فایل plist تولید شده را دانلود کنید که شامل تمام مقادیر پیش‌فرض است و آن را در پروژه Xcode خود ذخیره کنید.

    استراحت

    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

    1. در برگه پارامترها ، منوی را باز کنید و مقادیر پیش‌فرض را دانلود کنید.

    2. وقتی از شما خواسته شد، plist. را برای iOS فعال کنید، سپس روی دانلود فایل کلیک کنید.

  2. این مقادیر را با استفاده از setDefaults: به شی Remote Config اضافه کنید: . مثال زیر مقادیر پیش‌فرض درون برنامه‌ای را از یک فایل plist تنظیم می‌کند:

    سویفت

    remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

    هدف-C

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

مرحله 3: مقادیر پارامتر را برای استفاده در برنامه خود دریافت کنید

اکنون می توانید مقادیر پارامتر را از شی Remote Config دریافت کنید. اگر بعداً مقادیری را در Remote Config تنظیم کنید، آنها را واکشی کنید و سپس آنها را فعال کنید، این مقادیر برای برنامه شما در دسترس هستند. در غیر این صورت، مقادیر پارامتر درون برنامه را با استفاده از setDefaults: . برای بدست آوردن این مقادیر، متد configValueForKey: را فراخوانی کنید و کلید پارامتر را به عنوان آرگومان ارائه کنید.

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

یک راه خواناتر و راحت‌تر برای دسترسی به این مقادیر در سوئیفت از طریق علامت گذاری مشترک سوئیفت است:

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

از Codable برای پیکربندی ایمن نوع استفاده کنید

برای پیکربندی های پیچیده تر، می توانید از پروتکل Codable سوئیفت برای رمزگشایی داده های ساخت یافته از Remote Config استفاده کنید. این مدیریت پیکربندی ایمن را فراهم می کند و کار با اشیاء پیچیده را ساده می کند.

// 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)")
    }
  }
}

این روش به شما امکان می دهد:

  • ساختارهای پیکربندی پیچیده را تعریف کنید.
  • پیکربندی‌های JSON را به‌طور خودکار تجزیه کنید.
  • هنگام دسترسی به مقادیر Remote Config از ایمنی نوع اطمینان حاصل کنید.
  • کدهای تمیز و قابل خواندن را برای مدیریت الگوهای Remote Config ساختاریافته ارائه دهید.

از Property Wrappers برای پیکربندی اعلامی در SwiftUI استفاده کنید

Property Wrappers یک ویژگی Swift قدرتمند است که به شما امکان می دهد رفتار سفارشی را به اظهارنامه های دارایی اضافه کنید. در SwiftUI، بسته‌بندی‌های ویژگی برای مدیریت وضعیت، اتصالات و سایر رفتارهای ویژگی استفاده می‌شوند. برای اطلاعات بیشتر، به راهنمای زبان Swift مراجعه کنید.

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()
    }
  }
}

هنگامی که می‌خواهید راهی برای دسترسی به مقادیر Remote Config در SwiftUI با پشتیبانی داخلی از مقادیر پیش‌فرض و مدیریت پیکربندی ساده‌شده داشته باشید، از پوشش ویژگی @RemoteConfigProperty استفاده کنید.

مرحله 4: مقادیر پارامتر را تنظیم کنید

با استفاده از کنسول Firebase یا Remote Config Backend API ، می‌توانید مقادیر پیش‌فرض باطن جدید ایجاد کنید که مقادیر درون برنامه را مطابق با منطق شرطی دلخواه یا هدف‌گذاری کاربر لغو می‌کند. این بخش شما را در مراحل کنسول Firebase برای ایجاد این مقادیر راهنمایی می کند.

  1. در کنسول Firebase ، پروژه خود را باز کنید.
  2. Remote Config از منو انتخاب کنید تا داشبورد Remote Config را مشاهده کنید.
  3. پارامترهایی را با همان نام پارامترهایی که در برنامه خود تعریف کرده اید تعریف کنید. برای هر پارامتر، می‌توانید یک مقدار پیش‌فرض تنظیم کنید (که در نهایت مقدار پیش‌فرض درون برنامه را لغو می‌کند) و همچنین می‌توانید مقادیر شرطی را تنظیم کنید. برای کسب اطلاعات بیشتر، پارامترها و شرایط Remote Config ببینید.
  4. اگر از شرایط سیگنال سفارشی استفاده می کنید، ویژگی ها و مقادیر آنها را تعریف کنید. مثال‌های زیر نحوه تعریف یک شرط سیگنال سفارشی را نشان می‌دهند.

    سویفت

      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)")
          }
    }

    هدف-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: مقادیر را واکشی و فعال کنید

برای واکشی مقادیر پارامتر از Remote Config ، متد fetchWithCompletionHandler: یا fetchWithExpirationDuration:completionHandler: را فراخوانی کنید. هر مقداری که در باطن تنظیم می‌کنید در شی Remote Config واکشی و ذخیره می‌شود.

برای مواردی که می خواهید مقادیر را در یک تماس واکشی و فعال کنید، از fetchAndActivateWithCompletionHandler: .

این مثال مقادیری را از Remote Config (مقادیر ذخیره شده در حافظه پنهان) واکشی می کند و activateWithCompletionHandler: تا آنها را در دسترس برنامه قرار دهد:

سویفت

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()
}

هدف-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);
    }
}];

از آنجایی که این مقادیر پارامتر به روز شده بر رفتار و ظاهر برنامه شما تأثیر می گذارد، باید مقادیر واکشی شده را در زمانی فعال کنید که تجربه یکنواختی را برای کاربر شما تضمین کند، مانند دفعه بعد که کاربر برنامه شما را باز می کند. برای اطلاعات بیشتر و مثال‌ها، به استراتژی‌های بارگیری Remote Config مراجعه کنید.

مرحله ۶: به‌روزرسانی‌ها را در زمان واقعی گوش دهید

پس از واکشی مقادیر پارامتر، می‌توانید Remote Config بی‌درنگ برای گوش دادن به به‌روزرسانی‌های Remote Config استفاده کنید. زمانی که به‌روزرسانی‌ها در دسترس هستند Remote Config به دستگاه‌های متصل سیگنال می‌دهد و پس از انتشار نسخه Remote Config جدید، به‌طور خودکار تغییرات را واکشی می‌کند.

به‌روزرسانی‌های بی‌درنگ توسط Firebase SDK برای پلتفرم‌های Apple نسخه 10.7.0 و بالاتر پشتیبانی می‌شوند.

  1. در برنامه خود، با addOnConfigUpdateListener تماس بگیرید تا شروع به شنیدن به‌روزرسانی‌ها کنید و به‌طور خودکار مقادیر پارامترهای جدید یا به‌روزرسانی‌شده را واکشی کنید. مثال زیر به‌روزرسانی‌ها را گوش می‌دهد و هنگامی که activateWithCompletionHandler فراخوانی می‌شود، از مقادیر تازه واکشی شده برای نمایش یک پیام خوش‌آمدگویی به‌روز استفاده می‌کند.

    سویفت

    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()
        }
      }
    }

    هدف-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. دفعه بعد که نسخه جدیدی از Remote Config خود را منتشر می کنید، دستگاه هایی که برنامه شما را اجرا می کنند و به تغییرات گوش می دهند، کنترل کننده تکمیل را صدا می کنند.

گاز دادن

اگر یک برنامه در مدت زمان کوتاهی بارها واکشی شود، تماس‌های واکشی قطع می‌شوند و SDK FIRRemoteConfigFetchStatusThrottled برمی‌گرداند. قبل از SDK نسخه 6.3.0، محدودیت 5 درخواست واکشی در یک پنجره 60 دقیقه ای بود (نسخه های جدید محدودیت های مجاز بیشتری دارند).

در طول توسعه برنامه، ممکن است بخواهید بارها واکشی کنید تا حافظه نهان را به طور مکرر (بارها در ساعت) به‌روزرسانی کنید تا به شما امکان می‌دهد در حین توسعه و آزمایش برنامه خود، به سرعت تکرار کنید. هنگامی که پیکربندی در سرور به روز می شود، به روز رسانی های پیکربندی از راه دور به طور خودکار از حافظه پنهان عبور می کنند. برای تطبیق تکرار سریع در پروژه‌ای با توسعه‌دهندگان متعدد، می‌توانید به طور موقت یک ویژگی FIRRemoteConfigSettings با حداقل فاصله واکشی کم ( MinimumFetchInterval ) در برنامه خود اضافه کنید.

فاصله واکشی تولید پیش‌فرض و توصیه‌شده برای Remote Config 12 ساعت است، به این معنی که پیکربندی‌ها بیش از یک بار در یک پنجره 12 ساعته از پشتیبان دریافت نمی‌شوند، صرف نظر از اینکه واقعاً چند تماس واکشی انجام شده است. به طور خاص، حداقل فاصله واکشی به ترتیب زیر تعیین می شود:

  1. پارامتر در fetch(long)
  2. پارامتر در FIRRemoteConfigSettings.MinimumFetchInterval
  3. مقدار پیش فرض 12 ساعت

مراحل بعدی

اگر قبلاً این کار را نکرده‌اید، موارد استفاده Remote Config را بررسی کنید و به برخی از مفاهیم کلیدی و مستندات استراتژی‌های پیشرفته نگاهی بیندازید، از جمله: