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

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


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

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

  1. যদি আগে থেকে না করে থাকেন, তাহলে আপনার অ্যাপল প্রজেক্টে ফায়ারবেস যোগ করুন

  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 ব্যাকএন্ড থেকে আপডেট হওয়া প্যারামিটার মান সংগ্রহ করতে এবং সংগৃহীত মানগুলো কখন আপনার অ্যাপে উপলব্ধ হবে তা নিয়ন্ত্রণ করতে ব্যবহৃত হয়।

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

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

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

    আপনি Google Cloud CLI অথবা Cloud Shell ব্যবহার করে নিম্নলিখিত কমান্ডটি চালিয়ে একটি বেয়ারার টোকেন তৈরি করতে পারেন:

    gcloud auth print-access-token
    

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

    Firebase কনসোল

    1. প্যারামিটার ট্যাবে, মেনুটি খুলুন এবং 'Download default values' নির্বাচন করুন।

    2. নির্দেশিত হলে, iOS-এর জন্য .plist সক্রিয় করুন, তারপর 'Download file'-এ ক্লিক করুন।

  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-তে, স্টেট, বাইন্ডিং এবং অন্যান্য প্রপার্টি আচরণ ব্যবস্থাপনার জন্য প্রপার্টি র‍্যাপার ব্যবহার করা হয়। আরও তথ্যের জন্য, সুইফট ল্যাঙ্গুয়েজ গাইড দেখুন।

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 প্ল্যাটফর্মের জন্য Firebase এসডিকে v10.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()
          }
        }
      }
      

    উদ্দেশ্য-সি

    __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. ডিফল্ট মান ১২ ঘন্টা