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
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 de 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 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.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
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.
En Xcode, con el proyecto de tu 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 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.
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 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 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:
En Xcode, con el proyecto de tu app abierto, navega al panel Packages Dependencies.
Selecciona el paquete
generative-ai-swift
de la lista de dependencias de paquetes.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
// 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.0-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.0-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.0-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.0-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.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
.
- 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 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
porstruct
con variables estáticas. Este cambio permite más flexibilidad para evolucionar la API de forma retrocompatible. Cuando uses sentenciasswitch
, ahora debes incluir un casodefault:
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
aHarmBlockThreshold
. Este tipo ahora esstruct
.Se quitaron los casos
unknown
yunspecified
de las siguientes enumeraciones (ahorastruct
):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 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 deModelContent
para evitar errores ocasionales del compilador. Las imágenes que no se codifican correctamente seguirán arrojando 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 ella comoSafetySetting.HarmCategory
, se puede reemplazar porHarmCategory
.
- Se cambió
Comentarios sobre seguridad
- Se quitó el tipo
SafetyFeedback
, ya que no se usó 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 se pueden configurar en el inicializador.
- Se cambiaron las propiedades públicas de
Kotlin
Enumeraciones
Se reemplazaron las clases
enum
ysealed
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
aHarmBlockThreshold
.Se quitaron los 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 nulo.
- Se cambió el campo
Clase de duración
- Se quitaron todos los usos de la clase
Duration
de Kotlin y se reemplazó porlong
. Este cambio proporciona una mejor interoperabilidad con Java.
- Se quitaron todos los usos de la clase
Metadatos de citas
- Se unió todos los campos declarados anteriormente en
CitationMetadata
en una clase nueva llamadaCitation
. Las citas se pueden encontrar en la lista llamadacitations
enCitationMetadata
. Este cambio permite una mejor alineación de los tipos en todas las plataformas.
- Se unió todos los campos declarados anteriormente en
Cómo contar tokens
- Se cambió el campo
totalBillableCharacters
para que sea nulo.
- 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
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.
- Se movió el parámetro
Java
Enumeraciones
Se reemplazaron las clases
enum
ysealed
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
aHarmBlockThreshold
.Se quitaron los 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 nulo.
- Se cambió el campo
Clase de duración
- Se quitaron todos los usos de la clase
Duration
de Kotlin y se reemplazó porlong
. Este cambio proporciona una mejor interoperabilidad con Java.
- Se quitaron todos los usos de la clase
Metadatos de citas
- Se unió todos los campos declarados anteriormente en
CitationMetadata
en una clase nueva llamadaCitation
. Las citas se pueden encontrar en la lista llamadacitations
enCitationMetadata
. Este cambio permite una mejor alineación de los tipos en todas las plataformas.
- Se unió todos los campos declarados anteriormente en
Cómo contar tokens
- Se cambió el campo
totalBillableCharacters
para que sea nulo.
- 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
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.
- Se movió el parámetro
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
yFinishReason
.
- Se quitaron los 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 SDK de Firebase AI Logic.
Errores
- Se quitaron todos los usos de
GoogleGenerativeAIError
y, de manera opcional, se cambió aAIError
.
- Se quitaron todos los usos de
Dart
Enumeraciones
- Se quitaron los valores de las siguientes enumeraciones:
HarmCategory
,HarmProbability
,BlockReason
yFinishReason
.
- Se quitaron los valores de las siguientes enumeraciones:
Parte de datos
- Se cambió el nombre de
DataPart
porInlineDataPart
y el de la funcióndata
destatic
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 un futuro cercano, pero se moverá 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 tenga el valor predeterminadonull
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 no intencional:
defaultTimeout
,CountTokensResponseFields
,parseCountTokensResponse
,parseEmbedContentResponse
,parseGenerateContentResponse
,parseContent
,BatchEmbedContentsResponse
,ContentEmbedding
,EmbedContentRequest
yEmbedContentResponse
.
- Se quitaron los siguientes tipos, métodos y propiedades que se expusieron de forma no intencional:
Cómo contar 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
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.
- Se movió el parámetro
Funcionalidad de incorporación
- Se quitó la funcionalidad de incorporación no admitida (
embedContent
ybatchEmbedContents
) del modelo.
- Se quitó la funcionalidad de incorporación no admitida (
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