iOS-এ রিমোট কনফিগ ব্যবহার করা শুরু করা

প্ল্যাটফর্ম বেছে নিন: iOS+ Android ওয়েব Flutter Unity C++


আপনি Firebase Remote Config ব্যবহার করে আপনার অ্যাপে প্যারামিটার নির্ধারণ করতে এবং ক্লাউডে সেগুলির ভ্যালু আপডেট করতে পারবেন, যার ফলে অ্যাপ আপডেট ডিস্ট্রিবিউট না করেই আপনার অ্যাপের চেহারা ও আচরণ পরিবর্তন করতে পারবেন। এই নির্দেশিকা আপনাকে শুরু করার ধাপগুলি দেখায় এবং কিছু স্যাম্পেল কোড প্রদান করে, যার সবকটিই firebase/quickstart-ios GitHub রিপোজিটরি থেকে ক্লোন বা ডাউনলোড করার জন্য উপলভ্য।

ধাপ ১: আপনার অ্যাপে Remote Config যোগ করুন

  1. আপনি আগে থেকে না করে থাকলে, আপনার Apple প্রোজেক্টে Firebase যোগ করুন।

  2. Remote Config-এর জন্য, ব্যবহারকারীর প্রপার্টি ও অডিয়েন্সের ক্ষেত্রে অ্যাপ ইনস্ট্যান্সের কন্ডিশনাল টার্গেটিং করতে Google Analytics প্রয়োজন। আপনার প্রোজেক্টে Google Analytics চালু করেছেন কিনা তা নিশ্চিত করুন।

  3. নিচের উদাহরণে যেভাবে দেখানো হয়েছে, সেইভাবে সিঙ্গলটন Remote Config অবজেক্ট তৈরি করুন:

    Swift

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

    Objective-C

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

এই অবজেক্টটি ইন-অ্যাপ ডিফল্ট প্যারামিটারের মান স্টোর করতে, Remote Config ব্যাকএন্ড থেকে আপডেট করা প্যারামিটারের মান ফেচ করতে এবং ফেচ করা মান কখন আপনার অ্যাপে উপলভ্য করা হবে তা নিয়ন্ত্রণ করতে ব্যবহার করা হয়।

ডেভেলপমেন্টের সময়, তুলনামূলকভাবে কম ন্যূনতম ফেচ ইন্টারভাল সেট করার সাজেস্ট করা হয়। আরও তথ্যের জন্য থ্রটলিং দেখুন।

ধাপ ২: অ্যাপ-মধ্যস্থ ডিফল্ট প্যারামিটারের মান সেট করুন

আপনি Remote Config অবজেক্টে ইন-অ্যাপ ডিফল্ট প্যারামিটার ভ্যালু সেট করতে পারেন, যাতে আপনার অ্যাপ Remote Config ব্যাকএন্ডের সাথে কানেক্ট করার আগে প্রত্যাশিতভাবে কাজ করে এবং ব্যাকএন্ডে কোনও ভ্যালু সেট করা না থাকলে ডিফল্ট ভ্যালু উপলভ্য থাকে।

  1. NSDictionary অবজেক্ট বা plist ফাইল ব্যবহার করে প্যারামিটারের নামের সেট ও ডিফল্ট প্যারামিটারের ভ্যালু নির্ধারণ করুন।

    আপনি যদি আগে থেকেই Remote Config ব্যাকএন্ড প্যারামিটার ভ্যালু কনফিগার করে থাকেন, তাহলে আপনি একটি জেনারেট করা plist ফাইল ডাউনলোড করতে পারেন যাতে সব ডিফল্ট ভ্যালু অন্তর্ভুক্ত থাকে এবং এটি আপনার Xcode প্রোজেক্টে সেভ করতে পারেন।

    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
    

    Google Cloud CLI বা Cloud Shell ব্যবহার করে নিম্নলিখিত কমান্ড রান করার মাধ্যমে আপনি বিয়ারার টোকেন জেনারেট করতে পারবেন:

    gcloud auth print-access-token
    

    এই টোকেনটি স্বল্পস্থায়ী, তাই আপনি যাচাইকরণ সংক্রান্ত কোনও সমস্যা পেলে এটি আবার তৈরি করতে হতে পারে।

    Firebase কনসোল

    1. Firebase কনসোলে, DevOps ও এনগেজমেন্ট > রিমোট কনফিগ > প্যারামিটার পৃষ্ঠায় যান।

    2. মেনু খুলুন এবং ডিফল্ট ভ্যালু ডাউনলোড করুন বিকল্প বেছে নিন।

    3. প্রম্পট করা হলে, iOS-এর জন্য .plist চালু করুন, তারপর ফাইল ডাউনলোড করুন বিকল্পে ক্লিক করুন।

  2. setDefaults: ব্যবহার করে Remote Config অবজেক্টে এইসব ভ্যালু যোগ করুন। নিম্নলিখিত উদাহরণটি plist ফাইল থেকে ইন-অ্যাপ ডিফল্ট ভ্যালু সেট করে:

    Swift

    RemoteConfig.remoteConfig().setDefaults(fromPlist: "RemoteConfigDefaults")

    Objective-C

    [remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

ধাপ ৩: আপনার অ্যাপে ব্যবহার করার জন্য প্যারামিটারের মান পান

এখন আপনি 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

Swift-এ এইসব ভ্যালু অ্যাক্সেস করার আরও সহজ ও সুবিধাজনক উপায় হল Swift-এর সাবস্ক্রিপ্ট নোটেশন:

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 ব্যবহার করুন

আরও জটিল কনফিগারেশনের জন্য, আপনি Remote Config থেকে স্ট্রাকচার্ড ডেটা ডিকোড করতে Swift-এর Codable প্রোটোকল ব্যবহার করতে পারেন। এটি টাইপ-সেফ কনফিগারেশন ম্যানেজমেন্ট প্রদান করে এবং জটিল অবজেক্টের সাথে কাজ করা সহজ করে তোলে।

// 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 টেমপ্লেট ম্যানেজ করার জন্য পরিষ্কার, সহজে পড়া যায় এমন কোড প্রদান করুন।

SwiftUI-তে ডিক্লেরেটিভ কনফিগারেশনের জন্য প্রপার্টি র‍্যাপার ব্যবহার করুন

প্রপার্টি র‍্যাপার হল একটি শক্তিশালী Swift ফিচার যা আপনাকে প্রপার্টি ডিক্লারেশনে কাস্টম আচরণ যোগ করতে দেয়। SwiftUI-তে, স্টেট, বাইন্ডিং এবং অন্যান্য প্রপার্টি আচরণ ম্যানেজ করতে প্রপার্টি র‍্যাপার ব্যবহার করা হয়। আরও তথ্যের জন্য, Swift Language Guide দেখুন।

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

আপনি যখন SwiftUI-তে Remote Config ভ্যালু অ্যাক্সেস করার জন্য একটি ঘোষণামূলক উপায় চান, তখন @RemoteConfigProperty প্রপার্টি র‍্যাপার ব্যবহার করুন, যাতে ডিফল্ট ভ্যালু এবং সরলীকৃত কনফিগারেশন ম্যানেজমেন্টের জন্য বিল্ট-ইন সাপোর্ট থাকে।

ধাপ ৪: প্যারামিটারের ভ্যালু সেট করা

Firebase কনসোল বা Remote Config ব্যাকএন্ড এপিআই ব্যবহার করে, আপনি নতুন ব্যাকএন্ড ডিফল্ট ভ্যালু তৈরি করতে পারবেন যা আপনার পছন্দসই শর্তসাপেক্ষ লজিক বা ব্যবহারকারী টার্গেটিং অনুযায়ী অ্যাপ-মধ্যস্থ ভ্যালুকে ওভাররাইড করে। এই বিভাগে Firebase কনসোলের ধাপগুলি দেখানো হয়েছে যার মাধ্যমে এইসব ভ্যালু তৈরি করা যায়।

  1. Firebase কনসোলে, DevOps ও এনগেজমেন্ট > রিমোট কনফিগ > প্যারামিটার পৃষ্ঠায় যান।

  2. আপনার অ্যাপে যে প্যারামিটারগুলি সংজ্ঞায়িত করেছেন সেগুলির মতো একই নামের প্যারামিটারগুলি সংজ্ঞায়িত করুন। প্রতিটি প্যারামিটারের জন্য, আপনি একটি ডিফল্ট মান সেট করতে পারেন (যা শেষ পর্যন্ত অ্যাপ-মধ্যস্থ ডিফল্ট মানকে ওভাররাইড করবে) এবং আপনি শর্তসাপেক্ষ মানও সেট করতে পারেন। আরও জানতে, Remote Config প্যারামিটার ও শর্তাবলী দেখুন।

  3. কাস্টম সিগন্যাল শর্তাবলী ব্যবহার করলে, অ্যাট্রিবিউট ও সেগুলির ভ্যালু নির্ধারণ করুন। কাস্টম সিগন্যাল কন্ডিশন কীভাবে নির্ধারণ করতে হয় তা নিচের উদাহরণ থেকে জানতে পারবেন।

    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!");
              }
        }];
    });

ধাপ ৫: মান নিয়ে এসে সেগুলি অ্যাক্টিভেট করা

Remote Config থেকে প্যারামিটারের মান ফেচ করতে, fetchWithCompletionHandler: বা fetchWithExpirationDuration:completionHandler: মেথড কল করুন। ব্যাকএন্ডে আপনার সেট করা যেকোনও ভ্যালু ফেচ করা হয় এবং Remote Config অবজেক্টে ক্যাশে করা হয়।

আপনি যদি একটি কলের মাধ্যমে মান নিয়ে এসে সেগুলি অ্যাক্টিভেট করতে চান, তাহলে fetchAndActivateWithCompletionHandler: ব্যবহার করুন।

এই উদাহরণ Remote Config ব্যাকএন্ড (ক্যাশে করা ভ্যালু নয়) থেকে ভ্যালু নিয়ে আসে এবং অ্যাপে উপলভ্য করার জন্য activateWithCompletionHandler: কল করে:

Swift

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

Objective-C

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

এইসব আপডেট করা প্যারামিটারের মান আপনার অ্যাপের আচরণ ও চেহারাকে প্রভাবিত করে বলে, আপনাকে এমন সময়ে ফেচ করা মান অ্যাক্টিভেট করতে হবে যাতে আপনার ব্যবহারকারী মসৃণ অভিজ্ঞতা পান, যেমন, ব্যবহারকারী পরের বার আপনার অ্যাপ খুললে। আরও তথ্য ও উদাহরণের জন্য Remote Config লোড করার স্ট্র্যাটেজি দেখুন।

ধাপ ৬: রিয়েল টাইমে আপডেট শুনুন

প্যারামিটারের মান ফেচ করার পরে, আপনি রিয়েল-টাইম Remote Config ব্যবহার করে Remote Config ব্যাকএন্ড থেকে আপডেট শুনতে পারবেন। আপডেট উপলভ্য হলে কানেক্ট করা ডিভাইসে রিয়েল-টাইম Remote Config সিগন্যাল পাঠানো হয় এবং আপনি নতুন Remote Config ভার্সন প্রকাশ করার পরে অটোমেটিক পরিবর্তনগুলি ফেচ করা হয়।

Apple প্ল্যাটফর্ম v10.7.0+ এবং তার পরবর্তী ভার্সনের জন্য Firebase SDK-তে রিয়েল-টাইম আপডেট কাজ করে।

  1. আপনার অ্যাপে, আপডেট শোনার জন্য addOnConfigUpdateListener কল করুন এবং যেকোনও নতুন বা আপডেট করা প্যারামিটারের মান অটোমেটিক ফেচ করুন। নিম্নলিখিত উদাহরণটি আপডেটের জন্য অপেক্ষা করে এবং activateWithCompletionHandler কল করা হলে, একটি আপডেট করা স্বাগত মেসেজ দেখানোর জন্য নতুন আনা ভ্যালু ব্যবহার করে।

    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. পরের বার আপনি Remote Config-এর নতুন ভার্সন প্রকাশ করলে, যেসব ডিভাইসে আপনার অ্যাপ চলছে এবং পরিবর্তনের জন্য অপেক্ষা করছে, সেগুলি কমপ্লিশন হ্যান্ডলারকে কল করবে।

থ্রটলিং

কোনও অ্যাপ অল্প সময়ের মধ্যে অনেকবার ফেচ করলে, ফেচ কল থ্রটল করা হয় এবং SDK FIRRemoteConfigFetchStatusThrottled রিটার্ন করে। SDK ভার্সন 6.3.0-এর আগে, ৬০ মিনিটের উইন্ডোতে ৫টি ফেচ অনুরোধের সীমা ছিল (নতুন ভার্সনে আরও বেশি অনুমোদিত সীমা আছে)।

অ্যাপ ডেভেলপ করার সময়, আপনি হয়ত ক্যাশে খুব ঘন ঘন (প্রতি ঘণ্টায় অনেকবার) রিফ্রেশ করার জন্য আরও বেশিবার ফেচ করতে চাইবেন যাতে আপনি অ্যাপ ডেভেলপ ও টেস্ট করার সময় দ্রুত ইটারেট করতে পারেন। সার্ভারে কনফিগ আপডেট করা হলে, রিয়েল-টাইম রিমোট কনফিগ আপডেট অটোমেটিক ক্যাশে বাইপাস করে। অনেক ডেভেলপারকে নিয়ে কোনও প্রোজেক্টে দ্রুত ইটারেশন করার জন্য, আপনি সাময়িকভাবে আপনার অ্যাপে কম ন্যূনতম ফেচ ইন্টারভ্যাল (MinimumFetchInterval) সহ FIRRemoteConfigSettings প্রপার্টি যোগ করতে পারেন।

Remote Config-এর জন্য ডিফল্ট এবং সাজেস্ট করা প্রোডাকশন ফেচ ইন্টারভাল হল ১২ ঘণ্টা, যার অর্থ হল ১২ ঘণ্টার উইন্ডোতে ব্যাকএন্ড থেকে কনফিগারেশন একবারের বেশি ফেচ করা হবে না, আসলে কতগুলি ফেচ কল করা হয়েছে তা নির্বিশেষে। বিশেষ করে, ন্যূনতম ফেচ ইন্টারভাল নিম্নলিখিত ক্রমে নির্ধারিত হয়:

  1. fetch(long)-এ প্যারামিটার
  2. FIRRemoteConfigSettings.MinimumFetchInterval-এ প্যারামিটার
  3. ১২ ঘণ্টার ডিফল্ট ভ্যালু