Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Configurar múltiples proyectos

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Esta página describe cómo usar más de un proyecto de Firebase en su aplicación.

Muchas aplicaciones solo necesitan un único proyecto de Firebase y la configuración predeterminada que se describe en las guías de inicio . Ejemplos de cuándo puede ser útil usar varios proyectos de Firebase incluyen:

  • Configurar su entorno de desarrollo para usar diferentes proyectos de Firebase según el tipo de compilación o el objetivo.
  • Acceder al contenido de varios proyectos de Firebase en su aplicación.

Admite diferentes entornos

Un caso de uso común es admitir proyectos de Firebase separados para sus entornos de desarrollo y producción.

Los SDK web y de administración se configuran pasando valores directamente a sus funciones de inicialización. Para estos SDK, puede usar una verificación de tiempo de ejecución para seleccionar variables de configuración de desarrollo o producción.

Las plataformas Android y Apple (y sus contenedores Unity y C++) normalmente cargan la configuración desde un archivo de configuración: GoogleService-Info.plist en la plataforma Apple y google-services.json en Android. Estos archivos se leen en un objeto de opciones ( FIROption o FirebaseOptions ) al que hace referencia el objeto de la aplicación de Firebase ( FIRApp o FirebaseApp ).

Para estas plataformas, el cambio entre entornos generalmente se implementa como una decisión de tiempo de compilación, mediante el uso de diferentes archivos de configuración para cada entorno.

Admite múltiples entornos en tu aplicación de Apple

De forma predeterminada, FirebaseApp.configure() cargará el archivo GoogleService-Info.plist incluido con la aplicación. Si sus entornos de desarrollo y producción están configurados como objetivos separados en Xcode, puede:

  • Descargue ambos archivos GoogleService-Info.plist
  • Almacene los dos archivos en directorios diferentes
  • Agregue ambos a su proyecto Xcode
  • Asocie los diferentes archivos con los diferentes objetivos usando el panel de Membresía objetivo:

Panel de membresía de destino

Si las compilaciones son parte de un solo objetivo, la mejor opción es dar nombres únicos a ambos archivos de configuración (por ejemplo GoogleService-Info-Free.plist y GoogleService GoogleService-Info-Paid.plist ). Luego elija en tiempo de ejecución qué plist cargar. Esto se muestra en el siguiente ejemplo:

// Load a named file.
let filePath = Bundle.main.path(forResource: "MyGoogleService", ofType: "plist")
guard let fileopts = FirebaseOptions(contentsOfFile: filePath!)
  else { assert(false, "Couldn't load config file") }
FirebaseApp.configure(options: fileopts)

Admite múltiples entornos en tu aplicación de Android

En Android, el complemento Gradle de Google Services procesa el archivo google-service.json en recursos de cadena de Android. Puede ver qué recursos se crean en la documentación del complemento de servicios de Google en Procesamiento del archivo JSON .

Puede tener varios archivos google-services.json para diferentes variantes de compilación colocando los archivos google-services.json en directorios dedicados con el nombre de cada variante en la raíz del módulo de la aplicación. Por ejemplo, si tiene sabores de compilación de "desarrollo" y "lanzamiento", su configuración podría organizarse de esta manera:

app/
    google-services.json
    src/development/google-services.json
    src/release/google-services.json
    ...

Para obtener más información, consulte la documentación del complemento de servicios de Google sobre cómo agregar el archivo JSON .

Luego, FirebaseInitProvider carga estos recursos, que se ejecuta antes que el código de su aplicación e inicializa las API de Firebase usando esos valores.

Debido a que este proveedor solo lee recursos con nombres conocidos, otra opción es agregar los recursos de cadena directamente a su aplicación en lugar de usar el complemento Gradle de Google Services. Puedes hacer esto por:

  • Eliminando el complemento de google-services de su root build.gradle
  • Eliminando google-services.json de su proyecto
  • Agregar los recursos de cadena directamente
  • Eliminando apply plugin: 'com.google.gms.google-services' de su aplicación build.gradle

Usa múltiples proyectos en tu aplicación

A veces, necesita acceder a diferentes proyectos utilizando las mismas API; por ejemplo, acceder a varias instancias de bases de datos. En la mayoría de los casos, hay un objeto de aplicación central de Firebase que administra la configuración de todas las API de Firebase. Este objeto se inicializa como parte de su configuración normal. Sin embargo, cuando desee acceder a varios proyectos desde una sola aplicación, necesitará un objeto de aplicación de Firebase distinto para hacer referencia a cada uno individualmente. Depende de usted inicializar estas otras instancias.

En ambos casos, primero debe crear un objeto de opciones de Firebase para almacenar los datos de configuración de la aplicación de Firebase. La documentación completa de las opciones se puede encontrar en la documentación de referencia de la API para las siguientes clases:

El uso de estas clases para admitir múltiples proyectos en una aplicación se muestra en los siguientes ejemplos:

Rápido

// Configure with manual options. Note that projectID and apiKey, though not
// required by the initializer, are mandatory.
let secondaryOptions = FirebaseOptions(googleAppID: "1:27992087142:ios:2a4732a34787067a",
                                       gcmSenderID: "27992087142")
secondaryOptions.apiKey = "AIzaSyBicqfAZPvMgC7NZkjayUEsrepxuXzZDsk"
secondaryOptions.projectID = "projectid-12345"

// The other options are not mandatory, but may be required
// for specific Firebase products.
secondaryOptions.bundleID = "com.google.firebase.devrel.FiroptionConfiguration"
secondaryOptions.trackingID = "UA-12345678-1"
secondaryOptions.clientID = "27992087142-ola6qe637ulk8780vl8mo5vogegkm23n.apps.googleusercontent.com"
secondaryOptions.databaseURL = "https://myproject.firebaseio.com"
secondaryOptions.storageBucket = "myproject.appspot.com"
secondaryOptions.androidClientID = "12345.apps.googleusercontent.com"
secondaryOptions.deepLinkURLScheme = "myapp://"
secondaryOptions.storageBucket = "projectid-12345.appspot.com"
secondaryOptions.appGroupID = nil

Java

// Manually configure Firebase Options. The following fields are REQUIRED:
//   - Project ID
//   - App ID
//   - API Key
FirebaseOptions options = new FirebaseOptions.Builder()
        .setProjectId("my-firebase-project")
        .setApplicationId("1:27992087142:android:ce3b6448250083d1")
        .setApiKey("AIzaSyADUe90ULnQDuGShD9W23RDP0xmeDc6Mvw")
        // setDatabaseURL(...)
        // setStorageBucket(...)
        .build();

Kotlin+KTX

// Manually configure Firebase Options. The following fields are REQUIRED:
//   - Project ID
//   - App ID
//   - API Key
val options = FirebaseOptions.Builder()
        .setProjectId("my-firebase-project")
        .setApplicationId("1:27992087142:android:ce3b6448250083d1")
        .setApiKey("AIzaSyADUe90ULnQDuGShD9W23RDP0xmeDc6Mvw")
        // .setDatabaseUrl(...)
        // .setStorageBucket(...)
        .build()

Web

// The following fields are REQUIRED:
//  - Project ID
//  - App ID
//  - API Key
const secondaryAppConfig = {
    projectId: "<PROJECT_ID>",
    appId: "<APP_ID>",
    apiKey: "<API_KEY>",
    // databaseURL: "...",
    // storageBucket: "...",
};

C++

firebase::AppOptions secondary_app_options;

// API key, app ID, and project ID are always required.
secondary_app_options.set_api_key("<API_KEY>");
secondary_app_options.set_app_id("<GOOGLE_APP_ID>");
secondary_app_options.set_project_id("<PROJECT_ID>");

// The following options are specific to individual Firebase products
// and may not always be required.
secondary_app_options.set_database_url("<DATABASE_URL>");
secondary_app_options.set_messaging_sender_id("<SENDER_ID>");
secondary_app_options.set_storage_bucket("<STORAGE_BUCKET>");

Unidad

Firebase.AppOptions secondaryAppOptions = new Firebase.AppOptions {
  ApiKey = "<API_KEY>",
  AppId = "<GOOGLE_APP_ID>",
  ProjectId = "<PROJECT_ID>"
};

Nodo.js

const secondaryServiceAccount = require('./path/to/serviceAccountKey.json');

// All required options are specified by the service account,
// add service-specific configuration like databaseURL as needed.
const secondaryAppConfig = {
    credential: cert(secondaryServiceAccount),
    // databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
};

Java

FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

FirebaseOptions secondaryAppConfig = new FirebaseOptions.Builder()
  .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
  .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
  .build();

Una vez que haya inicializado este objeto de opciones, puede usarlo para configurar una instancia de aplicación de Firebase adicional. Tenga en cuenta que en todos los ejemplos que se muestran a continuación, usamos la cadena secundaria . Este nombre se usa para recuperar la instancia de la aplicación y para distinguirla de otras instancias, incluida la instancia predeterminada (llamada [DEFAULT] ). Debe elegir una cadena adecuada para el uso previsto del otro proyecto de Firebase.

Los siguientes fragmentos muestran cómo conectarse a una base de datos en tiempo real alternativa (las API para otras funciones de Firebase siguen el mismo patrón).

Rápido

// Configure an alternative FIRApp.
FirebaseApp.configure(name: "secondary", options: secondaryOptions)

// Retrieve a previous created named app.
guard let secondary = FirebaseApp.app(name: "secondary")
  else { assert(false, "Could not retrieve secondary app") }


// Retrieve a Real Time Database client configured against a specific app.
let secondaryDb = Database.database(app: secondary)

Java

// Initialize with secondary app
FirebaseApp.initializeApp(this /* Context */, options, "secondary");

// Retrieve secondary FirebaseApp
FirebaseApp secondary = FirebaseApp.getInstance("secondary");

Kotlin+KTX

// Initialize secondary FirebaseApp.
Firebase.initialize(this /* Context */, options, "secondary")

// Retrieve secondary FirebaseApp.
val secondary = Firebase.app("secondary")
// Get the database for the other app.
val secondaryDatabase = Firebase.database(secondary)

Web

// Initialize another app with a different config
const secondaryApp = firebase.initializeApp(secondaryAppConfig, "secondary");
// Access services, such as the Realtime Database
// secondaryApp.database();

C++

firebase::App* secondary_app = firebase::App::Create(secondary_app_options, "Secondary");
firebase::database::Database* secondary_database = firebase::database::Database::GetInstance(secondary_app);

Unidad

var secondaryApp = Firebase.FirebaseApp.Create(secondaryAppOptions, "Secondary"));
var secondaryDatabase = Firebase.Database.FirebaseDatabase.getInstance(secondaryApp);

Nodo.js

// Initialize another app with a different config
const secondary = initializeApp(secondaryAppConfig, 'secondary');
// Access services, such as the Realtime Database
// const secondaryDatabase = secondary.database();

Java

// Initialize another app with a different config
FirebaseApp secondaryApp = FirebaseApp.initializeApp(secondaryAppConfig, "secondary");

// Retrieve the database.
FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(secondaryApp);

Garantice informes fiables para Analytics

Google Analytics recopila eventos muy temprano en el flujo de inicio de la aplicación, en algunas ocasiones antes de que se haya configurado la instancia principal de la aplicación Firebase. En estos casos, Firebase hace referencia al recurso de Android o GoogleService-Info.plist en las plataformas de Apple para buscar el ID de aplicación de Google correcto para almacenar eventos. Por este motivo, recomendamos utilizar los métodos de configuración predeterminados siempre que sea posible.

Si se requiere configuración de tiempo de ejecución, tenga en cuenta las siguientes advertencias:

  1. Si usa AdMob y solicita anuncios al inicio como se recomienda, es posible que pierda algunos datos de Analytics relacionados con los anuncios para dispositivos móviles cuando no utilice el enfoque de configuración basado en recursos.
  2. Proporcione solo un único ID de aplicación de Google en cada variante distribuida de su aplicación. Por ejemplo, si envía la versión 1 de su aplicación con un GOOGLE_APP_ID determinado en la configuración y luego sube la versión 2 con un ID diferente, es posible que se eliminen los datos analíticos.
  3. En las plataformas de Apple, no agregue GoogleService-Info.plist a su proyecto si proporciona una configuración diferente en tiempo de ejecución, ya que esto puede resultar en un cambio aparente de GOOGLE_APP_ID y provocar la pérdida de Analytics.