FCM के साथ Firebase के लिए Cloud Functions द्वारा प्रदान किए गए Remote Config बैकग्राउंड फ़ंक्शन ट्रिगरिंग का उपयोग करके, आप वास्तविक समय में Remote Config अपडेट का प्रचार कर सकते हैं। इस परिदृश्य में, आप एक ऐसा फ़ंक्शन बनाते हैं जो आपके द्वारा डैशबोर्ड या 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 एडमिन एसडीके का उपयोग करें:
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
पैरामीटर सेट करता है, और फिर उसे FCM संदेश के डेटा पेलोड के रूप में PUSH_RC
विषय की सदस्यता लेने वाले सभी क्लाइंट को भेजता है।
क्लाइंट पर दूरस्थ कॉन्फ़िगरेशन स्थिति सेट करें
पिछले चरण में दिखाया गया डेटा पेलोड ऐप की साझा प्राथमिकताओं में हमेशा 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 द्वारा थ्रॉटल किया जा सकता है। थ्रॉटलिंग देखें।