Firebase is back at Google I/O on May 10! Register now

রিয়েল টাইমে রিমোট কনফিগ আপডেট প্রচার করুন

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

FCM- এর সাথে Firebase-এর জন্য ক্লাউড ফাংশন দ্বারা প্রদত্ত রিমোট কনফিগ ব্যাকগ্রাউন্ড ফাংশন ট্রিগারিং ব্যবহার করে, আপনি রিয়েল টাইমে রিমোট কনফিগ আপডেটগুলি প্রচার করতে পারেন। এই পরিস্থিতিতে, আপনি একটি ফাংশন তৈরি করেন যা আপনি ড্যাশবোর্ড বা API থেকে আপনার রিমোট কনফিগার টেমপ্লেট প্রকাশ বা রোল ব্যাক করার সময় ট্রিগার করে। টেমপ্লেট আপডেটটি ক্লায়েন্টদের জানাতে একটি FCM বার্তা পাঠানোর ফাংশনটি ট্রিগার করে যে তাদের বিদ্যমান কনফিগারেশনটি পুরানো এবং তাদের পরবর্তী আনা সার্ভার থেকে হওয়া উচিত:

ক্লাউড ফাংশনের মাধ্যমে FCM সতর্কতা ট্রিগার করে একটি দূরবর্তী কনফিগার আপডেট দেখানো ডায়াগ্রাম

এই নথির বাকি অংশ আপনাকে রিমোট কনফিগ আপডেটগুলিকে রিয়েল টাইমে প্রচার করার জন্য এই ধাপগুলির মধ্য দিয়ে চলে।

একটি FCM বিষয়ে ক্লায়েন্ট অ্যাপের দৃষ্টান্ত সাবস্ক্রাইব করুন

একটি এফসিএম বার্তা লক্ষ্য করার জন্য ক্লায়েন্ট অ্যাপ্লিকেশন উদাহরণগুলির একটি বড় গ্রুপ যেমন আপনার সম্পূর্ণ ব্যবহারকারী বেস, বিষয় বার্তাপ্রেরণ হল সবচেয়ে দক্ষ প্রক্রিয়া। প্রতিটি অ্যাপ ইন্সট্যান্স যা রিয়েলটাইম রিমোট কনফিগ আপডেটগুলি গ্রহণ করবে তাদের অবশ্যই একটি বিষয়ের নাম সাবস্ক্রাইব করতে হবে, উদাহরণস্বরূপ, PUSH_RC :

সুইফট

extension AppDelegate : MessagingDelegate {
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
        messaging.subscribe(toTopic: "PUSH_RC") { error in
            print("Subscribed to PUSH_RC topic")
        }
    }
}
    

উদ্দেশ্য গ

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    [[FIRMessaging messaging] subscribeToTopic:@"PUSH_RC" completion:^(NSError * _Nullable error) {
        NSLog(@"Subscribed to PUSH_RC topic");
    }];
}
    

অ্যান্ড্রয়েড

@Override
public void onNewToken(String s) {
    FirebaseMessaging.getInstance().subscribeToTopic("PUSH_RC");
}
    

টেমপ্লেট আপডেটে একটি FCM পিং পাঠাতে একটি ফাংশন তৈরি করুন

আপনি রিমোট কনফিগ ইভেন্টগুলির প্রতিক্রিয়া হিসাবে একটি ফাংশন ট্রিগার করতে পারেন, যার মধ্যে একটি নতুন কনফিগার সংস্করণ প্রকাশ বা একটি পুরানো সংস্করণে রোলব্যাক রয়েছে৷ রিয়েল টাইমে টেমপ্লেট আপডেটগুলি প্রচার করতে, একটি ফাংশন তৈরি করুন যা টেমপ্লেট প্রকাশনা ইভেন্টগুলির জন্য শোনে এবং তারপর ক্লায়েন্ট অ্যাপের দৃষ্টান্তগুলিতে একটি নীরব পিং পাঠাতে আপনার ফাংশন থেকে FCM অ্যাডমিন SDK ব্যবহার করুন:

exports.pushConfig = functions.remoteConfig.onUpdate(versionMetadata => {
  // Create FCM payload to send data message to PUSH_RC topic.
  const payload = {
    topic: "PUSH_RC",
    data: {
      "CONFIG_STATE": "STALE"
    }
  };
  // Use the Admin SDK to send the ping via FCM.
  return admin.messaging().send(payload).then(resp => {
    console.log(resp);
    return null;
  });
});

এই ফাংশনটি একটি CONFIG_STATE প্যারামিটার সেট করে এবং তারপর PUSH_RC বিষয়ের সদস্যতা নেওয়া সমস্ত ক্লায়েন্টদের কাছে একটি FCM বার্তার ডেটা পেলোড হিসাবে পাঠায়।

ক্লায়েন্টে দূরবর্তী কনফিগার অবস্থা সেট করুন

পূর্ববর্তী ধাপে দেখানো ডেটা পেলোড সবসময় অ্যাপের ভাগ করা পছন্দগুলিতে CONFIG_STATE কে STALE এ সেট করে। এটি ইঙ্গিত দেয় যে অ্যাপটিতে ইতিমধ্যেই সংরক্ষিত রিমোট কনফিগার টেমপ্লেটটি এখন নতুন, আপডেট হওয়া টেমপ্লেট তৈরির কারণে পুরানো হয়ে গেছে যার প্রকাশনা ফাংশনটিকে ট্রিগার করেছে৷ এই অবস্থার জন্য পরীক্ষা করার জন্য আপনার বিজ্ঞপ্তি হ্যান্ডলার আপডেট করুন:

সুইফট

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    if (userInfo.index(forKey: "CONFIG_STATE") != nil) {
        print("Config set to stale")
        UserDefaults.standard.set(true, forKey:"CONFIG_STALE")
    }

    completionHandler(UIBackgroundFetchResult.newData)
}
    

উদ্দেশ্য গ

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    if (userInfo[@"CONFIG_STATE"]) {
        NSLog(@"Config set to stale");
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"CONFIG_STALE"];
    }

    completionHandler(UIBackgroundFetchResultNewData);
}
    

অ্যান্ড্রয়েড

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if (remoteMessage.getData().containsKey("CONFIG_STATE")) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        sharedPreferences.edit().putBoolean("CONFIG_STALE", true).apply();
    }
}
    

অ্যাপ স্টার্টআপে রিমোট কনফিগারেশন আপডেট আনুন

সুইফট

func fetchConfig() {
  welcomeLabel.text = remoteConfig[loadingPhraseConfigKey].stringValue

  var expirationDuration = 3600
  // If your app is using developer mode, expirationDuration is set to 0, so each fetch will
  // retrieve values from the service.
  if remoteConfig.configSettings.isDeveloperModeEnabled || UserDefaults.standard.bool(forKey: "CONFIG_STALE") {
    expirationDuration = 0
  }

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

উদ্দেশ্য গ

- (void)fetchConfig {
    self.welcomeLabel.text = self.remoteConfig[kLoadingPhraseConfigKey].stringValue;

    long expirationDuration = 3600;
    // If your app is using developer mode, expirationDuration is set to 0, so each fetch will
    // retrieve values from the Remote Config service.
    if (self.remoteConfig.configSettings.isDeveloperModeEnabled || [[NSUserDefaults standardUserDefaults] boolForKey:@"CONFIG_STALE"]) {
        expirationDuration = 0;
    }

    [self.remoteConfig fetchWithExpirationDuration:expirationDuration completionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
        if (status == FIRRemoteConfigFetchStatusSuccess) {
            NSLog(@"Config fetched!");
            [self.remoteConfig activateFetched];
            [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"CONFIG_STALE"];
        } else {
            NSLog(@"Config not fetched");
            NSLog(@"Error %@", error.localizedDescription);
        }
        [self displayWelcome];
    }];
}
    

অ্যান্ড্রয়েড

private void fetchWelcomeMessage() {
    mWelcomeTextView.setText(mFirebaseRemoteConfig.getString("loading_phrase"));

    long cacheExpiration = 43200; // 12 hours in seconds.
    // If your app is using developer mode or cache is stale, cacheExpiration is set to 0,
    // so each fetch will retrieve values from the service.
    if (mFirebaseRemoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled() ||
            mSharedPreferences.getBoolean("CONFIG_STALE", false)) {
        cacheExpiration = 0;
    }

    mFirebaseRemoteConfig.fetch(cacheExpiration)
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(MainActivity.this, "Fetch Succeeded",
                                Toast.LENGTH_SHORT).show();

                        // After config data is successfully fetched, it must be activated before newly fetched
                        // values are returned.
                        mFirebaseRemoteConfig.activateFetched();
                    } else {
                        Toast.makeText(MainActivity.this, "Fetch Failed",
                                Toast.LENGTH_SHORT).show();
                    }
                    mWelcomeTextView.setText(mFirebaseRemoteConfig.getString("welcome_message"));
                }
            });
}
    

অবশেষে, নেটওয়ার্ক থেকে রিমোট কনফিগ আনতে বাধ্য করতে আপনার অ্যাপে যুক্তি যোগ করুন (স্থানীয় স্টোরেজ উপেক্ষা করে) কারণ CONFIG_STATE STALE । যদি আপনার অ্যাপটি নেটওয়ার্ক থেকে খুব ঘন ঘন আসে, তাহলে এটি Firebase দ্বারা থ্রোটল হতে পারে। থ্রটলিং দেখুন।