Ir directamente a las instrucciones de migración
¿Por qué migrar para usar los SDKs de Firebase AI Logic?
Es posible que hayas probado un conjunto alternativo de SDKs de clientes web o para dispositivos móviles que te dieron acceso a Gemini Developer API.
Esos SDKs para clientes no se integraron en el sólido ecosistema de Firebase que ofrece servicios críticos para las apps web y para dispositivos móviles. Ahora están obsoletos y se recomienda usar los SDKs clientes de Firebase AI Logic, que te permiten acceder a Gemini Developer API.
Funciones de seguridad para aplicaciones web y para dispositivos móviles
Para 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 por parte de clientes no autorizados.
Cuando usas Firebase App Check con Firebase AI Logic, nunca agregas 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 y no se expone a actores maliciosos.
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. Usar Firebase AI Logic significa que tus apps se encuentran en un ecosistema centrado en las necesidades de las apps y los desarrolladores de pila completa. Por ejemplo:
Configura de forma dinámica los parámetros de configuración del tiempo de ejecución o intercambia 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 SDKs de bases de datos creados para apps web y para dispositivos móviles (como Cloud Firestore).
Migra 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
Accede a la consola de Firebase y, luego, selecciona tu proyecto de Firebase.
En la consola de Firebase, ve a la página Firebase AI Logic.
Haz clic en Comenzar para iniciar un flujo de trabajo guiado que te ayudará a configurar las APIs requeridas y los recursos para tu proyecto.
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 exclusiva en tu proyecto.
No agregues esta nueva clave de API de Gemini a la base de código de tu app. Obtén más información.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.
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
Una vez que hayas configurado tu proyecto de Firebase y conectado tu app a Firebase (consulta el paso anterior), 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 de 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 posterior.
En Xcode, con tu proyecto de app abierto, navega a File > Add Package Dependencies.
Cuando se te solicite, agrega el repositorio del SDK de Firebase para plataformas de Apple:
https://github.com/firebase/firebase-ios-sdk
Selecciona la versión más reciente del SDK.
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 de Gemini y Imagen.
En el archivo Gradle del módulo (nivel de la 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 de Gemini y Imagen.
En el archivo Gradle del módulo (nivel de la 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 de Gemini y Imagen. La biblioteca se incluye como parte del SDK de Firebase JavaScript para la Web.
Instala el SDK de Firebase JS para la Web con npm:
npm install firebase
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.
Desde el directorio de tu proyecto de Flutter, ejecuta el siguiente comando para instalar el complemento principal y el complemento de Firebase AI Logic:
flutter pub add firebase_core && flutter pub add firebase_ai
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';
Además, en tu archivo
lib/main.dart
, inicializa Firebase con el objetoDefaultFirebaseOptions
exportado por el archivo de configuración:await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, );
Vuelve a compilar tu aplicación de Flutter:
flutter run
Unity
La compatibilidad con Unity no estaba disponible en los SDKs de cliente de Google AI.
Aprende a comenzar a usar el SDK de Firebase AI Logic para Unity.
Quita el SDK anterior de tu app
Después de terminar de migrar tu app (consulta las secciones restantes de esta guía), asegúrate de borrar la biblioteca anterior.
Swift
Quita la biblioteca anterior:
En Xcode, con tu proyecto de app abierto, navega al panel Packages Dependencies.
Selecciona el paquete
generative-ai-swift
de la lista de dependencias del paquete.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 de cliente de Google AI.
Aprende a comenzar a usar el SDK de Firebase AI Logic para Unity.
Paso 3: Actualiza tus importaciones e inicializaciones en tu app
Actualiza tus importaciones y la forma en que inicializas el servicio de backend Gemini Developer API y creas una instancia de GenerativeModel
.
Swift
// BEFOREimport 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.5-flash")
Kotlin
// BEFOREimport 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.5-flash")
Java
// BEFOREimport 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.5-flash"); // Use the GenerativeModelFutures Java compatibility layer which offers // support for ListenableFuture and Publisher APIs GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Web
// BEFOREimport { 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.5-flash" });
Dart
// BEFOREimport '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.5-flash');
Unity
La compatibilidad con Unity no estaba disponible en los SDKs de cliente de Google AI.
Aprende a comenzar a usar el SDK de Firebase AI Logic para Unity.
Ten en cuenta que según la capacidad que uses, es posible que no siempre crees una instancia de GenerativeModel
.
- Para acceder a un modelo Imagen, crea una instancia de
ImagenModel
.
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 de Firebase AI Logic no admiten la ejecución de código. Si usas esta función, asegúrate de tener en cuenta esto en tu app.
Revisa las siguientes listas para ver si hay cambios que debas realizar en tu código para migrar a los SDKs cliente de Firebase AI Logic.
Obligatorio para todos los idiomas y plataformas
Llamadas a funciones
Si implementaste esta función, deberás actualizar la forma en que defines tu esquema. Te recomendamos que revises la guía de llamadas a funciones actualizada para aprender a escribir tus declaraciones de funciones.Genera resultados estructurados (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 para las solicitudes a 180 segundos.
Obligatorio según la plataforma o el idioma
Swift
Enumeraciones
Se reemplazaron la mayoría de los tipos
enum
porstruct
s con variables estáticas. Este cambio permite una mayor flexibilidad para desarrollar la API de forma retrocompatible. Cuando uses instruccionesswitch
, ahora debes incluir un casodefault:
para abarcar 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
aHarmBlockThreshold
. Este tipo ahora esstruct
.Se quitaron los casos
unknown
yunspecified
de las siguientes enumeraciones (ahorastruct
s):HarmCategory
,HarmBlockThreshold
,HarmProbability
,BlockReason
yFinishReason
.Se reemplazó la enumeración
ModelContent.Part
por un protocolo llamadoPart
para permitir que se agreguen tipos nuevos de forma compatible con versiones anteriores. Este cambio se describe con más detalle en la sección Partes de contenido.
Partes de contenido
Se quitó el protocolo
ThrowingPartsRepresentable
y se simplificaron los inicializadores deModelContent
para evitar errores ocasionales del compilador. Las imágenes que no se codifican correctamente seguirán generando errores cuando se usen engenerateContent
.Se reemplazaron los casos
ModelContent.Part
por los siguientes tiposstruct
que cumplen con el protocoloPart
:- De
.text
aTextPart
- De
.data
aInlineDataPart
- De
.fileData
aFileDataPart
- De
.functionCall
aFunctionCallPart
- De
.functionResponse
aFunctionResponsePart
- De
Categoría de daño
- Se cambió
HarmCategory
para que ya no esté anidado en el tipoSafetySetting
. Si te refieres a él comoSafetySetting.HarmCategory
, puedes reemplazarlo porHarmCategory
.
- Se cambió
Comentarios sobre seguridad
- Se quitó el tipo
SafetyFeedback
, ya que no se usaba en ninguna de las respuestas.
- Se quitó el tipo
Metadatos de citas
- Se cambió el nombre de la propiedad
citationSources
acitations
enCitationMetadata
.
- Se cambió el nombre de la propiedad
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharacters
enCountTokensResponse
para que sea opcional y refleje situaciones en las que no se envían caracteres.
- Se cambió la propiedad
Respuesta del candidato
- Se cambió el nombre de
CandidateResponse
porCandidate
para que coincida con otras plataformas.
- Se cambió el nombre de
Configuración de generación
- Se cambiaron las propiedades públicas de
GenerationConfig
ainternal
. Todos siguen siendo configurables en el inicializador.
- Se cambiaron las propiedades públicas de
Kotlin
Enumeraciones
Se reemplazaron las clases
enum
ysealed
por clases regulares. Este cambio permite una mayor flexibilidad para desarrollar la API de forma retrocompatible.Se cambió el nombre de la enumeración
BlockThreshold
aHarmBlockThreshold
.Se quitaron valores de las siguientes enumeraciones:
HarmBlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
yFinishReason
.
Métodos de Blob
- Se cambió el nombre de todos los métodos que incluían
Blob
como parte de su nombre para usarInlineData
en su lugar.
- Se cambió el nombre de todos los métodos que incluían
Configuración de seguridad
- Se cambió el campo
method
para que sea anulable.
- Se cambió el campo
Clase de duración
- Se quitaron todos los usos de la clase
Duration
de Kotlin y se reemplazaron porlong
. Este cambio proporciona una mejor interoperabilidad con Java.
- Se quitaron todos los usos de la clase
Metadatos de citas
- Se encapsularon todos los campos declarados anteriormente en
CitationMetadata
en una nueva clase llamadaCitation
. Las citas se pueden encontrar en la lista llamadacitations
enCitationMetadata
. Este cambio permite una mejor alineación de los tipos en las diferentes plataformas.
- Se encapsularon todos los campos declarados anteriormente en
Recuento de tokens
- Se cambió el campo
totalBillableCharacters
para que sea anulable.
- Se cambió el campo
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharacters
enCountTokensResponse
para que sea opcional y refleje situaciones en las que no se envían caracteres.
- Se cambió la propiedad
Crea una instancia de un modelo
- Se trasladó el parámetro
requestOptions
al final de la lista de parámetros para alinearse con otras plataformas.
- Se trasladó el parámetro
Java
Enumeraciones
Se reemplazaron las clases
enum
ysealed
por clases regulares. Este cambio permite una mayor flexibilidad para desarrollar la API de forma retrocompatible.Se cambió el nombre de la enumeración
BlockThreshold
aHarmBlockThreshold
.Se quitaron valores de las siguientes enumeraciones:
HarmBlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
yFinishReason
.
Métodos de Blob
- Se cambió el nombre de todos los métodos que incluían
Blob
como parte de su nombre para usarInlineData
en su lugar.
- Se cambió el nombre de todos los métodos que incluían
Configuración de seguridad
- Se cambió el campo
method
para que sea anulable.
- Se cambió el campo
Clase de duración
- Se quitaron todos los usos de la clase
Duration
de Kotlin y se reemplazaron porlong
. Este cambio proporciona una mejor interoperabilidad con Java.
- Se quitaron todos los usos de la clase
Metadatos de citas
- Se encapsularon todos los campos declarados anteriormente en
CitationMetadata
en una nueva clase llamadaCitation
. Las citas se pueden encontrar en la lista llamadacitations
enCitationMetadata
. Este cambio permite una mejor alineación de los tipos en las diferentes plataformas.
- Se encapsularon todos los campos declarados anteriormente en
Recuento de tokens
- Se cambió el campo
totalBillableCharacters
para que sea anulable.
- Se cambió el campo
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharacters
enCountTokensResponse
para que sea opcional y refleje situaciones en las que no se envían caracteres.
- Se cambió la propiedad
Crea una instancia de un modelo
- Se trasladó el parámetro
requestOptions
al final de la lista de parámetros para alinearse con otras plataformas.
- Se trasladó el parámetro
Web
Ten en cuenta que el SDK de cliente de Google AI para JavaScript ha tenido muchos cambios desde que se bifurcaron los SDKs de cliente de Firebase AI Logic. En la siguiente lista, se incluyen algunos cambios potenciales que tal vez debas considerar a medida que migres a los SDKs de cliente de Firebase AI Logic.
Enumeraciones
- Se quitaron valores de las siguientes enumeraciones:
HarmCategory
,BlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
yFinishReason
.
- Se quitaron valores de las siguientes enumeraciones:
Motivo del bloqueo
- Se cambió
blockReason
enPromptFeedback
para que sea opcional.
- Se cambió
Fundamentación de la Búsqueda
- Se quitaron todos los usos de esta función, ya que aún no se admite en los SDKs de Firebase AI Logic.
Errores
- Se quitó todo el uso de
GoogleGenerativeAIError
y, de manera opcional, se migró aAIError
.
- Se quitó todo el uso de
Dart
Enumeraciones
- Se quitaron valores de las siguientes enumeraciones:
HarmCategory
,HarmProbability
,BlockReason
yFinishReason
.
- Se quitaron valores de las siguientes enumeraciones:
Parte de datos
- Se cambió el nombre de
DataPart
porInlineDataPart
y el de la funciónstatic
data
porinlineData
para alinearse con otras plataformas.
- Se cambió el nombre de
Opciones de solicitud
- Se quitó
RequestOptions
porquetimeout
no era funcional. Se volverá a agregar en el futuro cercano, pero se cambiará al tipoGenerativeModel
para que coincida con otras plataformas.
- Se quitó
Secuencias de detención
- Se cambió el parámetro
stopSequences
enGenerationConfig
para que sea opcional y se establezca de forma predeterminada ennull
en lugar de un array vacío.
- Se cambió el parámetro
Citas
- Se cambió el nombre de la propiedad
citationSources
acitations
enCitationMetadata
. Se cambió el nombre del tipoCitationSource
aCitation
para que coincida con otras plataformas.
- Se cambió el nombre de la propiedad
Tipos, métodos y propiedades públicos innecesarios
- Se quitaron los siguientes tipos, métodos y propiedades que se expusieron de forma involuntaria:
defaultTimeout
,CountTokensResponseFields
,parseCountTokensResponse
,parseEmbedContentResponse
,parseGenerateContentResponse
,parseContent
,BatchEmbedContentsResponse
,ContentEmbedding
,EmbedContentRequest
yEmbedContentResponse
.
- Se quitaron los siguientes tipos, métodos y propiedades que se expusieron de forma involuntaria:
Recuento de tokens
- Se quitaron los campos adicionales de la función
countTokens
que ya no son necesarios. Solo se necesitacontents
.
- Se quitaron los campos adicionales de la función
Crea una instancia de un modelo
- Se trasladó el parámetro
systemInstruction
al final de la lista de parámetros para alinearse con otras plataformas.
- Se trasladó el parámetro
Funcionalidad de incorporación
- Se quitó la funcionalidad de embedding no admitida (
embedContent
ybatchEmbedContents
) del modelo.
- Se quitó la funcionalidad de embedding no admitida (
Unity
La compatibilidad con Unity no estaba disponible en los SDKs de cliente de Google AI.
Aprende a comenzar a usar el SDK de Firebase AI Logic para Unity.
Envía comentarios sobre tu experiencia con Firebase AI Logic