Comienza a usar Firebase Remote Config


Puedes usar Firebase Remote Config para definir los parámetros en tu app y actualizar sus valores en la nube, lo que te permite modificar el aspecto y el comportamiento de la app sin distribuir una actualización. En esta guía, se explican los pasos que debes seguir para comenzar y se proporcionan códigos de muestra que puedes clonar o descargar desde el repositorio firebase/quickstart-ios de GitHub.

Paso 1: Agrega Remote Config a la app

  1. Instala el SDK de Firebase en las plataformas de Apple.

  2. Crea el objeto singleton de Remote Config, como se muestra en el siguiente ejemplo:

    Swift

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

    Objective-C

    self.remoteConfig = [FIRRemoteConfig remoteConfig];
    FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
    remoteConfigSettings.minimumFetchInterval = 0;
    self.remoteConfig.configSettings = remoteConfigSettings;

El objeto se usa para almacenar los valores de parámetros predeterminados en la app, recuperar valores de parámetros actualizados desde el backend de Remote Config y controlar cuándo están disponibles los valores recuperados para la app.

Durante el desarrollo, se recomienda establecer un intervalo de recuperación mínimo relativamente bajo. Consulta la sección Regulación para obtener más detalles.

Paso 2: Configura los valores de parámetros predeterminados en la app

Puedes configurar los valores de parámetros predeterminados en la app en el objeto de Remote Config, de modo que la app se comporte según lo previsto antes de conectarse al backend de Remote Config y para que los valores predeterminados estén disponibles si no hay ninguno configurado en el backend.

  1. Define un conjunto de nombres de parámetros y valores de parámetros predeterminados mediante un objeto NSDictionary o un archivo plist.

    Si ya configuraste los valores de parámetros de backend de Remote Config, puedes descargar un archivo plist generado que incluya todos los valores predeterminados y guardarlo en tu proyecto de Xcode.

    REST

    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
    

    Firebase console

    1. En la pestaña Parámetros, abre el Menú y selecciona Descargar valores predeterminados.

    2. Cuando se solicite, habilita .plist para iOS y, luego, haz clic en Descargar archivo.

  2. Agrega estos valores al objeto de Remote Config mediante setDefaults:. En el siguiente ejemplo, se establecen valores predeterminados en la app desde un archivo plist:

    Swift

    remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

    Objective-C

    [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

Paso 3: Obtén los valores de los parámetros para usarlos en tu app

Ahora puedes obtener valores de parámetros desde el objeto de Remote Config. Si, más tarde, configuras valores en el backend de Remote Config, los recuperas y luego los activas, estos valores estarán disponibles para la app. De lo contrario, obtendrás los valores de parámetros configurados en la app con setDefaults:. Para obtener estos valores, llama al método configValueForKey: y proporciona la clave del parámetro como argumento.

Paso 4: Configura los valores de los parámetros

Con Firebase console o las APIs de backend de Remote Config, puedes crear nuevos valores predeterminados del backend que anulen los valores integrados en la app según la lógica condicional o la segmentación a usuarios que desees. En esta sección, se explican los pasos que debes seguir en Firebase console para crear esos valores.

  1. Abre el proyecto en Firebase console.
  2. Selecciona Remote Config desde el menú para ver el panel de la función.
  3. Define parámetros que tengan los mismos nombres que los que definiste en la app. Puedes definir un valor predeterminado (que, en última instancia, anulará el valor predeterminado de la app) o valores condicionales para cada parámetro. Para obtener más información, consulta Parámetros y condiciones de Remote Config.

Paso 5: Recupera y activa valores

Para recuperar valores de los parámetros de Remote Config, llama a los métodos fetchWithCompletionHandler: o fetchWithExpirationDuration:completionHandler:. Todos los valores que estableces en el backend se recuperan y almacenan en caché en el objeto de Remote Config.

Para los casos en los que desees recuperar y activar valores en una llamada, usa fetchAndActivateWithCompletionHandler:.

En este ejemplo, se recuperan valores del backend de Remote Config (no valores almacenados en caché) y se llama a activateWithCompletionHandler: a fin de que estén disponibles para la app, de la siguiente manera:

Swift

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

Objective-C

[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
    if (status == FIRRemoteConfigFetchStatusSuccess) {
        NSLog(@"Config fetched!");
      [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
        if (error != nil) {
          NSLog(@"Activate error: %@", error.localizedDescription);
        } else {
          dispatch_async(dispatch_get_main_queue(), ^{
            [self displayWelcome];
          });
        }
      }];
    } else {
        NSLog(@"Config not fetched");
        NSLog(@"Error %@", error.localizedDescription);
    }
}];

Dado que estos valores de parámetros actualizados influyen en el comportamiento y el aspecto de la app, debes activar los valores recuperados en un momento en el que se garantice una experiencia fluida para el usuario, como la próxima vez que abra la app. Consulta las estrategias de carga de Remote Config para obtener más información y ejemplos.

Paso 6: Detecta actualizaciones en tiempo real

Después de recuperar los valores de los parámetros, puedes usar Remote Config en tiempo real para escuchar actualizaciones del backend de Remote Config. Remote Config en tiempo real envía señales a los dispositivos conectados cuando hay actualizaciones disponibles y recupera de forma automática los cambios después de que publicas una nueva versión de Remote Config.

Las actualizaciones en tiempo real son compatibles con la versión 10.7.0 (y versiones posteriores) del SDK de Firebase para plataformas de Apple.

  1. En tu app, llama a addOnConfigUpdateListener para comenzar a detectar actualizaciones y recuperar automáticamente los valores de parámetros nuevos o actualizados. En el siguiente ejemplo, se detectan actualizaciones y, cuando se llama a activateWithCompletionHandler, se usan los valores recién recuperados para mostrar un mensaje de bienvenida actualizado.

    Swift

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

    Objective-C

    __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. La próxima vez que publiques una versión nueva de Remote Config, los dispositivos que ejecutan tu app y detectan cambios llamarán al controlador de finalización.

Regulación

Si una app realiza recuperaciones muchas veces en poco tiempo, se regulan las llamadas de recuperación y el SDK muestra el estado FIRRemoteConfigFetchStatusThrottled. Antes de la versión 6.3.0 del SDK, el límite eran 5 solicitudes de recuperación en un período de 60 minutos (las versiones más recientes tienen límites más permisivos).

Durante el desarrollo de la app, te recomendamos recuperar más a menudo para actualizar la caché con mucha frecuencia (varias veces por hora) y que puedas iterar con rapidez mientras desarrollas y pruebas tu app. Las actualizaciones de Remote Config en tiempo real omiten la caché de forma automática cuando se actualiza la configuración en el servidor. Para permitir iteraciones rápidas en un proyecto con varios desarrolladores, puedes agregar temporalmente una propiedad FIRRemoteConfigSettings con un intervalo de recuperación mínimo bajo (MinimumFetchInterval) en la app.

En Remote Config, el intervalo de recuperación para la producción predeterminado y recomendado es de 12 horas, es decir, los parámetros de configuración no se recuperarán desde el backend más de una vez en un período de 12 horas, sin importar cuántas llamadas se realicen. Específicamente, el intervalo de recuperación mínimo se determina en el siguiente orden:

  1. El parámetro de fetch(long)
  2. El parámetro de FIRRemoteConfigSettings.MinimumFetchInterval
  3. El valor predeterminado de 12 horas

Próximos pasos

Si aún no lo has hecho, explora los casos de uso de Remote Config y revisa algunos de los conceptos clave y la documentación de estrategias avanzadas, en las que se incluye lo siguiente: