به روزرسانی های پیکربندی از راه دور را در زمان واقعی تبلیغ کنید

با استفاده از تابع پس زمینه پیکربندی از راه دور راه اندازی شده توسط ارائه توابع Cloud برای فایربیس همراه با FCM ، شما می توانید از راه دور انتشار پیکربندی به روز رسانی در زمان واقعی است. در این سناریو، تابعی ایجاد می‌کنید که وقتی الگوی Remote Config خود را از داشبورد یا API منتشر می‌کنید یا برمی‌گردانید، فعال می‌شود. به‌روزرسانی الگو، عملکرد ارسال یک پیام FCM را فعال می‌کند تا به مشتریان اطلاع دهد که پیکربندی موجود آنها قدیمی است و واکشی بعدی آنها باید از سرور باشد:

نموداری که به‌روزرسانی پیکربندی از راه دور را نشان می‌دهد که هشدارهای FCM را از طریق توابع ابری راه‌اندازی می‌کند.

بقیه این سند شما را از طریق این مراحل راهنمایی می‌کند تا به‌روزرسانی‌های Remote Config را در زمان واقعی منتشر کنید.

نمونه های برنامه مشتری را در یک موضوع 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")
        }
    }
}
    

هدف-C

- (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 در به روز رسانی قالب ایجاد کنید

می‌توانید عملکردی را در پاسخ به رویدادهای Remote Config، از جمله انتشار نسخه پیکربندی جدید یا بازگشت به نسخه قدیمی‌تر، فعال کنید. برای انتشار به‌روزرسانی‌های الگو در زمان واقعی، تابعی ایجاد کنید که به رویدادهای انتشار الگو گوش می‌دهد و سپس از FCM Admin 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 پارامتر، می فرستد و سپس که به عنوان بار دادهای یک پیام FCM به تمام مشتریان مشترک به PUSH_RC موضوع.

حالت Remote Config را روی کلاینت تنظیم کنید

محموله داده ها نشان داده شده در مرحله قبل همیشه مجموعه CONFIG_STATE به STALE در تنظیمات اشتراک گذاشته شده برنامه است. این نشان می‌دهد که الگوی Remote Config که قبلاً در برنامه ذخیره شده بود، اکنون به دلیل ایجاد الگوی جدید و به‌روزرسانی شده که انتشار آن عملکرد را فعال کرده است، قدیمی است. کنترل کننده اعلان خود را برای آزمایش این شرایط به روز کنید:

سریع

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

هدف-C

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

به‌روزرسانی‌های Remote Config را هنگام راه‌اندازی برنامه واکشی کنید

سریع

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

هدف-C

- (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 آن را مهار کند. مشاهده گلوگاه .