iOS-এ রিমোট কনফিগ দিয়ে শুরু করুন

প্ল্যাটফর্ম নির্বাচন করুন: iOS+ অ্যান্ড্রয়েড ওয়েব ফ্লাটার ইউনিটি সি++


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

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

  1. যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে আপনার অ্যাপল প্রজেক্টে Firebase যোগ করুন

  2. Remote Config জন্য, ব্যবহারকারীর বৈশিষ্ট্য এবং দর্শকদের কাছে অ্যাপের উদাহরণের শর্তসাপেক্ষ লক্ষ্যবস্তু করার জন্য Google Analytics প্রয়োজন। আপনার প্রকল্পে Google Analytics সক্ষম করুন।

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

    সুইফট

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

    অবজেক্টিভ-সি

    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 প্রকল্পে সংরক্ষণ করতে পারেন।

    বিশ্রাম

    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
    

    আপনি গুগল ক্লাউড সিএলআই অথবা ক্লাউড শেল ব্যবহার করে নিম্নলিখিত কমান্ডটি চালিয়ে একটি বিয়ারার টোকেন তৈরি করতে পারেন:

    gcloud auth print-access-token
    

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

    Firebase কনসোল

    1. প্যারামিটার ট্যাবে, মেনু খুলুন এবং ডিফল্ট মান ডাউনলোড করুন নির্বাচন করুন।

    2. অনুরোধ করা হলে, iOS এর জন্য .plist সক্ষম করুন, তারপর ফাইল ডাউনলোড করুন এ ক্লিক করুন।

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

    সুইফট

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

    অবজেক্টিভ-সি

    [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

সুইফটে এই মানগুলি অ্যাক্সেস করার একটি আরও পঠনযোগ্য এবং সুবিধাজনক উপায় হল সুইফটের সাবস্ক্রিপ্ট নোটেশনের মাধ্যমে:

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

টাইপ-সেফ কনফিগারেশনের জন্য কোডেবল ব্যবহার করুন

আরও জটিল কনফিগারেশনের জন্য, আপনি Remote Config থেকে স্ট্রাকচার্ড ডেটা ডিকোড করতে সুইফটের 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-তে ঘোষণামূলক কনফিগারেশনের জন্য প্রপার্টি র‍্যাপার ব্যবহার করুন

প্রপার্টি র‍্যাপার হল একটি শক্তিশালী সুইফট বৈশিষ্ট্য যা আপনাকে প্রপার্টি ঘোষণায় কাস্টম আচরণ যোগ করতে দেয়। 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 ব্যাকএন্ড 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)")
            }
      }

    অবজেক্টিভ-সি

        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: কল করে:

সুইফট

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

অবজেক্টিভ-সি

[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 সংস্করণ প্রকাশ করার পরে স্বয়ংক্রিয়ভাবে পরিবর্তনগুলি আনে।

Apple প্ল্যাটফর্ম v10.7.0+ এবং উচ্চতর সংস্করণের জন্য রিয়েল-টাইম আপডেটগুলি Firebase SDK দ্বারা সমর্থিত।

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

    অবজেক্টিভ-সি

    __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 এর আগে, 60 মিনিটের উইন্ডোতে 5টি ফেচ অনুরোধের সীমা ছিল (নতুন সংস্করণগুলিতে আরও অনুমতিমূলক সীমা রয়েছে)।

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

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

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