Migra a los SDK de lógica de IA de Firebase desde los SDK de cliente de IA de Google


Ir directamente a las instrucciones de migración

¿Por qué migrar para usar los SDK de Firebase AI Logic?

Es posible que hayas probado un conjunto alternativo de SDKs de cliente web o para dispositivos móviles que te brindaron acceso a Gemini Developer API.

Esos SDKs de cliente no se integraron en el sólido ecosistema de Firebase que ofrece servicios fundamentales para apps web y para dispositivos móviles. Ahora están obsoletos a favor de los SDKs de cliente Firebase AI Logic, que pueden brindarte acceso a Gemini Developer API.

Funciones de seguridad para apps web y para dispositivos móviles

En el caso de las apps web y para dispositivos móviles, la seguridad es fundamental y requiere consideraciones especiales, ya que tu código, incluidas las llamadas a Gemini API, se ejecuta en un entorno no protegido. Puedes usar Firebase App Check para proteger las APIs del abuso de clientes no autorizados.

Cuando usas Firebase App Check con Firebase AI Logic, nunca debes agregar tu clave de API de Gemini para Gemini Developer API directamente en la base de código de tu app web o para dispositivos móviles. En cambio, la clave de API de Gemini permanece en el servidor, sin exponerse a personas malintencionadas.

Ecosistema creado para apps web y para dispositivos móviles

Firebase es la plataforma de Google para desarrollar apps web y para dispositivos móviles. El uso de Firebase AI Logic significa que tus apps se encuentran en un ecosistema que se enfoca en las necesidades de los desarrolladores y las apps de pila completa. Por ejemplo:

  • Establece parámetros de configuración de tiempo de ejecución de forma dinámica o cambia los valores en tu app (como el nombre y la versión de un modelo) sin lanzar una versión nueva de la app con Firebase Remote Config.

  • Usa Cloud Storage for Firebase para incluir archivos grandes en tus solicitudes multimodales (si usas Vertex AI Gemini API). Los SDKs de cliente de Cloud Storage te ayudan a controlar las cargas y descargas de archivos (incluso en condiciones de red deficientes) y ofrecen más seguridad para los datos de tus usuarios finales. Obtén más información en nuestra guía de soluciones sobre el uso de Cloud Storage for Firebase.

  • Administra datos estructurados con SDK de bases de datos compilados para apps web y para dispositivos móviles (como Cloud Firestore).

Cómo migrar a los SDKs de Firebase AI Logic

Descripción general de los pasos para migrar a los SDKs de Firebase AI Logic:

  • Paso 1: Configura un proyecto de Firebase nuevo o existente y conecta tu app a Firebase.

  • Paso 2: Agrega los SDKs de Firebase AI Logic a tu app.

  • Paso 3: Actualiza las importaciones y la inicialización en tu app.

  • Paso 4: Actualiza tu código según las funciones que uses.

Paso 1: Configura un proyecto de Firebase y conecta tu app

  1. Accede a la consola de Firebase y, luego, selecciona tu proyecto de Firebase.

  2. En la consola de Firebase, ve a la página Firebase AI Logic.

  3. Haz clic en Comenzar para iniciar un flujo de trabajo guiado que te ayudará a configurar las APIs requeridas y los recursos de tu proyecto.

  4. Selecciona Gemini Developer API. Si lo deseas, puedes configurar y usar el otro proveedor de API más adelante.

    La consola habilitará las APIs requeridas y creará una clave de API de Gemini nueva y dedicada en tu proyecto.
    No agregues esta nueva clave de API de Gemini a la base de código de tu app. Más información.

  5. Si se te solicita en el flujo de trabajo de la consola, sigue las instrucciones en pantalla para registrar tu app y conectarla a Firebase.

  6. Continúa con esta guía de migración para actualizar la biblioteca y la inicialización en tu app.

Paso 2: Agrega el SDK de Firebase AI Logic a tu app

Con tu proyecto de Firebase configurado y tu app conectada a Firebase (consulta el paso anterior), ahora puedes agregar el SDK de Firebase AI Logic a tu app.

Swift

Usa Swift Package Manager para instalar y administrar las dependencias de Firebase.

La biblioteca de Firebase AI Logic proporciona acceso a las APIs para interactuar con los modelos Gemini y Imagen. La biblioteca se incluye como parte del SDK de Firebase para plataformas de Apple (firebase-ios-sdk).

Si ya usas Firebase, asegúrate de que tu paquete de Firebase sea la versión 11.13.0 o una posterior.

  1. En Xcode, con el proyecto de tu app abierto, navega a File > Add Package Dependencies.

  2. Cuando se te solicite, agrega el repositorio del SDK de Firebase para plataformas de Apple:

    https://github.com/firebase/firebase-ios-sdk
    
  3. Selecciona la versión más reciente del SDK.

  4. Selecciona la biblioteca de FirebaseAI.

Cuando termines, Xcode comenzará a resolver y descargar automáticamente tus dependencias en segundo plano.

Kotlin

El SDK de Firebase AI Logic para Android (firebase-ai) proporciona acceso a las APIs para interactuar con los modelos Gemini y Imagen.

En el archivo Gradle del módulo (nivel de app) (como <project>/<app-module>/build.gradle.kts), agrega la dependencia de la biblioteca de Firebase AI Logic para Android. Te recomendamos usar Firebase Android BoM para controlar las versiones de las bibliotecas.

dependencies {
  // ... other androidx dependencies

  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:33.15.0"))

  // Add the dependency for the Firebase AI Logic library
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
}

Cuando usas Firebase Android BoM, tu app siempre usará versiones compatibles de las bibliotecas de Firebase para Android.

Java

El SDK de Firebase AI Logic para Android (firebase-ai) proporciona acceso a las APIs para interactuar con los modelos Gemini y Imagen.

En el archivo Gradle del módulo (nivel de app) (como <project>/<app-module>/build.gradle.kts), agrega la dependencia de la biblioteca de Firebase AI Logic para Android. Te recomendamos usar Firebase Android BoM para controlar las versiones de las bibliotecas.

En el caso de Java, debes agregar dos bibliotecas adicionales.

dependencies {
  // ... other androidx dependencies

  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:33.15.0"))

  // Add the dependency for the Firebase AI Logic library
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")

  // Required for one-shot operations (to use `ListenableFuture` from Guava Android)
  implementation("com.google.guava:guava:31.0.1-android")

  // Required for streaming operations (to use `Publisher` from Reactive Streams)
  implementation("org.reactivestreams:reactive-streams:1.0.4")
}

Cuando usas Firebase Android BoM, tu app siempre usará versiones compatibles de las bibliotecas de Firebase para Android.

Web

La biblioteca de Firebase AI Logic proporciona acceso a las APIs para interactuar con los modelos Gemini y Imagen. La biblioteca se incluye como parte del SDK de Firebase JavaScript para la Web.

  1. Instala el SDK de Firebase JS para la Web con npm:

    npm install firebase
    
  2. Inicializa Firebase en tu app:

    import { initializeApp } from "firebase/app";
    
    // TODO(developer) Replace the following with your app's Firebase configuration
    // See: https://firebase.google.com/docs/web/learn-more#config-object
    const firebaseConfig = {
      // ...
    };
    
    // Initialize FirebaseApp
    const firebaseApp = initializeApp(firebaseConfig);
    

Dart

El complemento Firebase AI Logic para Flutter (firebase_ai) proporciona acceso a las APIs para interactuar con los modelos Gemini y Imagen.

  1. Desde el directorio de tu proyecto de Flutter, ejecuta el siguiente comando para instalar el complemento principal y el complemento Firebase AI Logic:

    flutter pub add firebase_core && flutter pub add firebase_ai
    
  2. En el archivo lib/main.dart, importa el complemento principal de Firebase, el complemento Firebase AI Logic y el archivo de configuración que generaste antes:

    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_ai/firebase_ai.dart';
    import 'firebase_options.dart';
    
  3. Además, en tu archivo lib/main.dart, inicializa Firebase con el objeto DefaultFirebaseOptions exportado por el archivo de configuración:

    await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    );
    
  4. Vuelve a compilar tu aplicación de Flutter:

    flutter run
    

Unity

La compatibilidad con Unity no estaba disponible en los SDKs cliente de Google AI.

Obtén información para comenzar a usar el SDK de Firebase AI Logic para Unity.

Quita el SDK anterior de tu app

Una vez que hayas terminado de migrar tu app (consulta las secciones restantes de esta guía), asegúrate de borrar la biblioteca anterior.

Swift

Quita la biblioteca anterior:

  1. En Xcode, con el proyecto de tu app abierto, navega al panel Packages Dependencies.

  2. Selecciona el paquete generative-ai-swift de la lista de dependencias de paquetes.

  3. Haz clic en el botón - en la parte inferior de la lista y, luego, en Quitar para confirmar.

Kotlin

dependencies {
    implementation("com.google.ai.client.generativeai:generativeai:VERSION")
}

Java

dependencies {
    implementation("com.google.ai.client.generativeai:generativeai:VERSION")
}

Web

// BEFORE
import { initializeApp } from "firebase/app";
import { GoogleGenerativeAI } from "@google/generative-ai";

Dart

Borra el paquete anterior:
flutter pub remove google_generative_ai

Unity

La compatibilidad con Unity no estaba disponible en los SDKs cliente de Google AI.

Obtén información para comenzar a usar el SDK de Firebase AI Logic para Unity.

Paso 3: Actualiza las importaciones y la inicialización en tu app

Actualiza tus importaciones y la forma en que inicializas el servicio de backend Gemini Developer API y crea una instancia de GenerativeModel.

Swift

// BEFORE
import GoogleGenerativeAI

let model = GenerativeModel(name: "MODEL_NAME", apiKey: APIKey.default)

// AFTER
import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-2.0-flash")

Kotlin

// BEFORE
import com.google.ai.client.generativeai.Chat
import com.google.ai.client.generativeai.type.Content
import com.google.ai.client.generativeai.java.GenerativeModuleFutures

...

val generativeModel = GenerativeModel(modelName = "MODEL_NAME",
  // Access your API key as a Build Configuration variable
  apiKey = BuildConfig.apiKey
)

// AFTER
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
import com.google.firebase.ai.type.GenerativeBackend

...

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-2.0-flash")

Java

// BEFORE
import com.google.ai.client.generativeai.Chat;
import com.google.ai.client.generativeai.type.Content;
import com.google.ai.client.generativeai.java.GenerativeModuleFutures;

...

GenerativeModel gm = new GenerativeModel("MODEL_NAME",
  // Access your API key as a Build Configuration variable
  BuildConfig.apiKey
);

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// AFTER
import com.google.firebase.ai.FirebaseAI;
import com.google.firebase.ai.GenerativeModel;
import com.google.firebase.ai.java.GenerativeModelFutures;
import com.google.firebase.ai.type.GenerativeBackend;

...

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-2.0-flash");

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

Web

// BEFORE
import { GoogleGenerativeAI } from "@google/generative-ai";

// Fetch your API_KEY and access your API
const API_KEY = "...";
const genAI = new GoogleGenerativeAI(API_KEY);

...

const model = genAI.getGenerativeModel({ model: "MODEL_NAME"});

// AFTER
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, { model: "gemini-2.0-flash" });

Dart

// BEFORE
import 'package:google_generative_ai/google_generative_ai.dart';

final apiKey = Platform.environment['API_KEY'];
if (apiKey == null) {
print('No \$API_KEY environment variable');
exit(1);
}

final model = GenerativeModel(model: 'MODEL_NAME', apiKey: apiKey);

// AFTER
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-2.0-flash');

Unity

La compatibilidad con Unity no estaba disponible en los SDKs cliente de Google AI.

Obtén información para comenzar a usar el SDK de Firebase AI Logic para Unity.

Ten en cuenta que , según la capability que uses, es posible que no siempre se cree una instancia de GenerativeModel.

Paso 4: Actualiza el código según las funciones que uses

En este paso, se describen los cambios que pueden ser necesarios según las funciones que uses.

  • Los SDKs de cliente Firebase AI Logic no admiten la ejecución de código. Si usas esta función, asegúrate de adaptarla a tu app.

  • Revisa las siguientes listas para ver si debes realizar algún cambio en tu código para adaptarte a la migración a los SDKs de cliente Firebase AI Logic.

Obligatorio para todos los idiomas y plataformas

  • Llamadas a funciones
    Si implementaste esta función, deberás actualizar la manera en que defines tu esquema. Te recomendamos que revises la guía actualizada de llamadas a función para aprender a escribir las declaraciones de tus funciones.

  • Cómo generar un resultado estructurado (como JSON) con responseSchema
    Si implementaste esta función, deberás actualizar la forma en que defines tu esquema. Te recomendamos que revises la nueva guía de salida estructurada para aprender a escribir esquemas JSON.

  • Tiempo de espera

    • Se cambió el tiempo de espera predeterminado de las solicitudes a 180 segundos.

Obligatorio según la plataforma o el idioma

Swift

  • Enumeraciones

    • Se reemplazaron la mayoría de los tipos enum por struct con variables estáticas. Este cambio permite más flexibilidad para evolucionar la API de forma retrocompatible. Cuando uses sentencias switch, ahora debes incluir un caso default: para cubrir valores desconocidos o no controlados, incluidos los valores nuevos que se agreguen al SDK en el futuro.

    • Se cambió el nombre de la enumeración BlockThreshold a HarmBlockThreshold. Este tipo ahora es struct.

    • Se quitaron los casos unknown y unspecified de las siguientes enumeraciones (ahora struct): HarmCategory, HarmBlockThreshold, HarmProbability, BlockReason y FinishReason.

    • Se reemplazó la enumeración ModelContent.Part por un protocolo llamado Part para permitir que se agreguen tipos nuevos de forma retrocompatible. Este cambio se describe con más detalle en la sección Partes del contenido.

  • Partes del contenido

    • Se quitó el protocolo ThrowingPartsRepresentable y se simplificaron los inicializadores de ModelContent para evitar errores ocasionales del compilador. Las imágenes que no se codifican correctamente seguirán arrojando errores cuando se usen en generateContent.

    • Se reemplazaron los casos ModelContent.Part por los siguientes tipos struct que cumplen con el protocolo Part:

      • De .text a TextPart
      • De .data a InlineDataPart
      • De .fileData a FileDataPart
      • De .functionCall a FunctionCallPart
      • De .functionResponse a FunctionResponsePart
  • Categoría de daño

    • Se cambió HarmCategory para que ya no esté anidado en el tipo SafetySetting. Si te refieres a ella como SafetySetting.HarmCategory, se puede reemplazar por HarmCategory.
  • Comentarios sobre seguridad

    • Se quitó el tipo SafetyFeedback, ya que no se usó en ninguna de las respuestas.
  • Metadatos de citas

    • Se cambió el nombre de la propiedad citationSources a citations en CitationMetadata.
  • Total de caracteres facturables

    • Se cambió la propiedad totalBillableCharacters en CountTokensResponse para que sea opcional y refleje situaciones en las que no se envían caracteres.
  • Respuesta del candidato

    • Se cambió el nombre de CandidateResponse por Candidate para que coincida con otras plataformas.
  • Configuración de generación

    • Se cambiaron las propiedades públicas de GenerationConfig a internal. Todos se pueden configurar en el inicializador.

Kotlin

  • Enumeraciones

    • Se reemplazaron las clases enum y sealed por clases normales. Este cambio permite más flexibilidad para evolucionar la API de forma retrocompatible.

    • Se cambió el nombre de la enumeración BlockThreshold a HarmBlockThreshold.

    • Se quitaron los valores de las siguientes enumeraciones: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason y FinishReason.

  • Métodos de BLOB

    • Se cambió el nombre de todos los métodos que incluían Blob como parte de su nombre para usar InlineData en su lugar.
  • Configuración de seguridad

    • Se cambió el campo method para que sea nulo.
  • Clase de duración

    • Se quitaron todos los usos de la clase Duration de Kotlin y se reemplazó por long. Este cambio proporciona una mejor interoperabilidad con Java.
  • Metadatos de citas

    • Se unió todos los campos declarados anteriormente en CitationMetadata en una clase nueva llamada Citation. Las citas se pueden encontrar en la lista llamada citations en CitationMetadata. Este cambio permite una mejor alineación de los tipos en todas las plataformas.
  • Cómo contar tokens

    • Se cambió el campo totalBillableCharacters para que sea nulo.
  • Total de caracteres facturables

    • Se cambió la propiedad totalBillableCharacters en CountTokensResponse para que sea opcional y refleje situaciones en las que no se envían caracteres.
  • Cómo crear una instancia de un modelo

    • Se movió el parámetro requestOptions al final de la lista de parámetros para alinearse con otras plataformas.

Java

  • Enumeraciones

    • Se reemplazaron las clases enum y sealed por clases normales. Este cambio permite más flexibilidad para evolucionar la API de forma retrocompatible.

    • Se cambió el nombre de la enumeración BlockThreshold a HarmBlockThreshold.

    • Se quitaron los valores de las siguientes enumeraciones: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason y FinishReason.

  • Métodos de BLOB

    • Se cambió el nombre de todos los métodos que incluían Blob como parte de su nombre para usar InlineData en su lugar.
  • Configuración de seguridad

    • Se cambió el campo method para que sea nulo.
  • Clase de duración

    • Se quitaron todos los usos de la clase Duration de Kotlin y se reemplazó por long. Este cambio proporciona una mejor interoperabilidad con Java.
  • Metadatos de citas

    • Se unió todos los campos declarados anteriormente en CitationMetadata en una clase nueva llamada Citation. Las citas se pueden encontrar en la lista llamada citations en CitationMetadata. Este cambio permite una mejor alineación de los tipos en todas las plataformas.
  • Cómo contar tokens

    • Se cambió el campo totalBillableCharacters para que sea nulo.
  • Total de caracteres facturables

    • Se cambió la propiedad totalBillableCharacters en CountTokensResponse para que sea opcional y refleje situaciones en las que no se envían caracteres.
  • Cómo crear una instancia de un modelo

    • Se movió el parámetro requestOptions al final de la lista de parámetros para alinearse con otras plataformas.

Web

Ten en cuenta que el SDK cliente de Google AI para JavaScript tuvo muchos cambios desde que se crearon los SDKs clientes de Firebase AI Logic a partir de él. La siguiente lista incluye algunos cambios potenciales que podrías tener que considerar cuando realices la migración a los SDKs de cliente Firebase AI Logic.

  • Enumeraciones

    • Se quitaron los valores de las siguientes enumeraciones: HarmCategory, BlockThreshold, HarmProbability, HarmSeverity, BlockReason y FinishReason.
  • Motivo del bloqueo

    • Se cambió blockReason en PromptFeedback para que sea opcional.
  • Fundamentación de la Búsqueda

    • Se quitaron todos los usos de esta función, ya que aún no se admite en los SDK de Firebase AI Logic.
  • Errores

    • Se quitaron todos los usos de GoogleGenerativeAIError y, de manera opcional, se cambió a AIError.

Dart

  • Enumeraciones

    • Se quitaron los valores de las siguientes enumeraciones: HarmCategory, HarmProbability, BlockReason y FinishReason.
  • Parte de datos

    • Se cambió el nombre de DataPart por InlineDataPart y el de la función data de static por inlineData para alinearse con otras plataformas.
  • Opciones de solicitud

    • Se quitó RequestOptions porque timeout no era funcional. Se volverá a agregar en un futuro cercano, pero se moverá al tipo GenerativeModel para que coincida con otras plataformas.
  • Secuencias de detención

    • Se cambió el parámetro stopSequences en GenerationConfig para que sea opcional y tenga el valor predeterminado null en lugar de un array vacío.
  • Citas

    • Se cambió el nombre de la propiedad citationSources a citations en CitationMetadata. Se cambió el nombre del tipo CitationSource a Citation para que coincida con otras plataformas.
  • Tipos, métodos y propiedades públicos innecesarios

    • Se quitaron los siguientes tipos, métodos y propiedades que se expusieron de forma no intencional: defaultTimeout, CountTokensResponseFields, parseCountTokensResponse, parseEmbedContentResponse, parseGenerateContentResponse, parseContent, BatchEmbedContentsResponse, ContentEmbedding, EmbedContentRequest y EmbedContentResponse.
  • Cómo contar tokens

    • Se quitaron los campos adicionales de la función countTokens que ya no son necesarios. Solo se necesita contents.
  • Cómo crear una instancia de un modelo

    • Se movió el parámetro systemInstruction al final de la lista de parámetros para alinearse con otras plataformas.
  • Funcionalidad de incorporación

    • Se quitó la funcionalidad de incorporación no admitida (embedContent y batchEmbedContents) del modelo.

Unity

La compatibilidad con Unity no estaba disponible en los SDKs cliente de Google AI.

Obtén información para comenzar a usar el SDK de Firebase AI Logic para Unity.


Envía comentarios sobre tu experiencia con Firebase AI Logic