Eseguire la migrazione agli SDK di logica dell'AI di Firebase dagli SDK client dell'AI di Google


Vai direttamente alle istruzioni per la migrazione

Perché eseguire la migrazione per utilizzare gli SDK Firebase AI Logic?

Potresti aver provato un insieme alternativo di SDK client web o mobile che ti ha dato accesso a Gemini Developer API.

Questi SDK client non sono stati integrati nel solido ecosistema Firebase che offre servizi essenziali per app web e mobile. Ora sono deprecati a favore degli SDK client Firebase AI Logic, che possono darti accesso a Gemini Developer API.

Funzionalità di sicurezza per app web e per dispositivi mobili

Per le app web e mobile, la sicurezza è fondamentale e richiede considerazioni speciali perché il codice, incluse le chiamate a Gemini API, viene eseguito in un ambiente non protetto. Puoi utilizzare Firebase App Check per proteggere le API dall'abuso da parte di client non autorizzati.

Quando utilizzi Firebase App Check con Firebase AI Logic, non aggiungi mai la chiave API Gemini per Gemini Developer API direttamente nel codebase della tua app mobile o web. Al contrario, la chiave API Gemini rimane sul server, senza essere esposta a utenti malintenzionati.

Ecosistema creato per app web e mobile

Firebase è la piattaforma di Google per lo sviluppo di app web e mobile. L'utilizzo di Firebase AI Logic significa che le tue app si trovano in un ecosistema incentrato sulle esigenze di app e sviluppatori full-stack. Ad esempio:

  • Imposta dinamicamente le configurazioni di runtime o scambia i valori nella tua app (ad esempio il nome e la versione di un modello) senza rilasciare una nuova versione dell'app utilizzando Firebase Remote Config.

  • Utilizza Cloud Storage for Firebase per includere file di grandi dimensioni nelle richieste multimodali (se utilizzi Vertex AI Gemini API). Gli SDK client Cloud Storage ti aiutano a gestire i caricamenti e i download di file (anche in condizioni di rete scarse) e offrono maggiore sicurezza per i dati degli utenti finali. Scopri di più nella nostra guida alla soluzione sull'utilizzo di Cloud Storage for Firebase.

  • Gestisci i dati strutturati utilizzando gli SDK per database creati per app web e mobile (come Cloud Firestore).

Migrazione agli SDK Firebase AI Logic

Panoramica dei passaggi per eseguire la migrazione agli SDK Firebase AI Logic:

  • Passaggio 1: configura un progetto Firebase nuovo o esistente e connetti la tua app a Firebase.

  • Passaggio 2: aggiungi gli SDK Firebase AI Logic alla tua app.

  • Passaggio 3: aggiorna le importazioni e l'inizializzazione nella tua app.

  • Passaggio 4: aggiorna il codice in base alle funzionalità che utilizzi.

Passaggio 1: configura un progetto Firebase e connetti la tua app

  1. Accedi alla console Firebase, quindi seleziona il tuo progetto Firebase.

  2. Nella console Firebase, vai alla pagina Firebase AI Logic.

  3. Fai clic su Inizia per avviare un flusso di lavoro guidato che ti aiuti a configurare le API richieste e le risorse per il tuo progetto.

  4. Seleziona Gemini Developer API. Puoi sempre configurare e utilizzare l'altro provider di API in un secondo momento, se vuoi.

    La console abiliterà le API richieste e creerà una nuova chiave API Gemini dedicata nel tuo progetto.
    Non aggiungere questa nuova chiave API Gemini nel codebase della tua app. Scopri di più.

  5. Se richiesto nel flusso di lavoro della console, segui le istruzioni sullo schermo per registrare la tua app e connetterla a Firebase.

  6. Continua a seguire questa guida alla migrazione per aggiornare la libreria e l'inizializzazione nella tua app.

Passaggio 2: aggiungi l'SDK Firebase AI Logic alla tua app

Dopo aver configurato il progetto Firebase e connesso l'app a Firebase (vedi il passaggio precedente), ora puoi aggiungere l'SDK Firebase AI Logic alla tua app.

Swift

Utilizza Swift Package Manager per installare e gestire le dipendenze di Firebase.

La libreria Firebase AI Logic fornisce l'accesso alle API per interagire con i modelli Gemini e Imagen. La libreria è inclusa nell'SDK Firebase per le piattaforme Apple (firebase-ios-sdk).

Se utilizzi già Firebase, assicurati che il pacchetto Firebase sia la versione 11.13.0 o successive.

  1. In Xcode, con il progetto dell'app aperto, vai a File > Add Package Dependencies (File > Aggiungi dipendenze pacchetto).

  2. Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple di Firebase:

    https://github.com/firebase/firebase-ios-sdk
    
  3. Seleziona l'ultima versione dell'SDK.

  4. Seleziona la libreria FirebaseAI.

Al termine, Xcode inizierà automaticamente a risolvere e a scaricare le tue dipendenze in background.

Kotlin

L'SDK Firebase AI Logic per Android (firebase-ai) fornisce l'accesso alle API per interagire con i modelli Gemini e Imagen.

Nel file Gradle (a livello di app) del modulo (ad esempio <project>/<app-module>/build.gradle.kts), aggiungi la dipendenza per la libreria Firebase AI Logic per Android. Ti consigliamo di utilizzare Firebase Android BoM per controllare il controllo delle versioni della libreria.

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

Utilizzando la Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.

Java

L'SDK Firebase AI Logic per Android (firebase-ai) fornisce l'accesso alle API per interagire con i modelli Gemini e Imagen.

Nel file Gradle (a livello di app) del modulo (ad esempio <project>/<app-module>/build.gradle.kts), aggiungi la dipendenza per la libreria Firebase AI Logic per Android. Ti consigliamo di utilizzare Firebase Android BoM per controllare il controllo delle versioni della libreria.

Per Java, devi aggiungere due librerie aggiuntive.

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

Utilizzando la Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.

Web

La libreria Firebase AI Logic fornisce l'accesso alle API per interagire con i modelli Gemini e Imagen. La libreria è inclusa nell'SDK Firebase JavaScript per il web.

  1. Installa l'SDK Firebase JS per il web utilizzando npm:

    npm install firebase
    
  2. Inizializza Firebase nella tua 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

Il plug-in Firebase AI Logic per Flutter (firebase_ai) fornisce l'accesso alle API per interagire con i modelli Gemini e Imagen.

  1. Dalla directory del progetto Flutter, esegui questo comando per installare il plug-in principale e il plug-in Firebase AI Logic:

    flutter pub add firebase_core && flutter pub add firebase_ai
    
  2. Nel file lib/main.dart, importa il plug-in Firebase Core, il plug-in Firebase AI Logic e il file di configurazione che hai generato in precedenza:

    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_ai/firebase_ai.dart';
    import 'firebase_options.dart';
    
  3. Inoltre, nel file lib/main.dart, inizializza Firebase utilizzando l'oggetto DefaultFirebaseOptions esportato dal file di configurazione:

    await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    );
    
  4. Ricrea l'applicazione Flutter:

    flutter run
    

Unity

Il supporto per Unity non era disponibile negli SDK client Google AI.

Scopri come iniziare a utilizzare l'SDK Firebase AI Logic per Unity.

Rimuovere il vecchio SDK dall'app

Dopo aver completato la migrazione dell'app (vedi le sezioni rimanenti di questa guida), assicurati di eliminare la vecchia libreria.

Swift

Rimuovi la vecchia raccolta:

  1. In Xcode, con il progetto dell'app aperto, vai al riquadro Packages Dependencies (Dipendenze pacchetti).

  2. Seleziona il pacchetto generative-ai-swift dall'elenco delle dipendenze dei pacchetti.

  3. Fai clic sul pulsante - nella parte inferiore dell'elenco e fai clic su Rimuovi per confermare.

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

Elimina il vecchio pacchetto:
flutter pub remove google_generative_ai

Unity

Il supporto per Unity non era disponibile negli SDK client Google AI.

Scopri come iniziare a utilizzare l'SDK Firebase AI Logic per Unity.

Passaggio 3: aggiorna le importazioni e l'inizializzazione nell'app

Aggiorna le importazioni e la modalità di inizializzazione del servizio di backend Gemini Developer API e crea un'istanza 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.5-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.5-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.5-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.5-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.5-flash');

Unity

Il supporto per Unity non era disponibile negli SDK client Google AI.

Scopri come iniziare a utilizzare l'SDK Firebase AI Logic per Unity.

Tieni presente che, a seconda della funzionalità che utilizzi, potresti non creare sempre un'istanza GenerativeModel.

Passaggio 4: aggiorna il codice in base alle funzionalità che utilizzi

Questo passaggio descrive le modifiche che potrebbero essere necessarie a seconda delle funzionalità che utilizzi.

  • Gli SDK client Firebase AI Logic non supportano l'esecuzione del codice. Se utilizzi questa funzionalità, assicurati di adattarla alla tua app.

  • Esamina i seguenti elenchi per individuare eventuali modifiche che potresti dover apportare al tuo codice per eseguire la migrazione agli SDK client Firebase AI Logic.

Obbligatorio per tutte le lingue e le piattaforme

  • Chiamata di funzioni
    Se hai implementato questa funzionalità, dovrai apportare aggiornamenti al modo in cui definisci lo schema. Ti consigliamo di consultare la guida alla chiamata di funzioni aggiornata per scoprire come scrivere le dichiarazioni di funzioni.

  • Generazione di output strutturato (come JSON) utilizzando responseSchema
    Se hai implementato questa funzionalità, dovrai apportare aggiornamenti al modo in cui definisci lo schema. Ti consigliamo di consultare la nuova guida all'output strutturato per scoprire come scrivere schemi JSON.

  • Timeout

    • È stato modificato il timeout predefinito per le richieste a 180 secondi.

Obbligatorio in base alla piattaforma o alla lingua

Swift

  • Enumerazioni

    • La maggior parte dei tipi enum sono stati sostituiti con struct con variabili statiche. Questa modifica consente una maggiore flessibilità per l'evoluzione dell'API in modo compatibile con le versioni precedenti. Quando utilizzi le istruzioni switch, ora devi includere un caso default: per coprire valori sconosciuti o non gestiti, inclusi i nuovi valori che verranno aggiunti all'SDK in futuro.

    • L'enumerazione BlockThreshold è stata rinominata in HarmBlockThreshold; questo tipo ora è un struct.

    • Rimozione dei casi unknown e unspecified dalle seguenti enumerazioni (ora struct): HarmCategory, HarmBlockThreshold, HarmProbability, BlockReason e FinishReason.

    • Ha sostituito l'enumerazione ModelContent.Part con un protocollo denominato Part per consentire l'aggiunta di nuovi tipi in modo compatibile con le versioni precedenti. Questa modifica è descritta in modo più dettagliato nella sezione Parti dei contenuti.

  • Parti dei contenuti

    • È stato rimosso il protocollo ThrowingPartsRepresentable e sono stati semplificati gli inizializzatori per ModelContent per evitare errori occasionali del compilatore. Le immagini che non vengono codificate correttamente genereranno comunque errori quando vengono utilizzate in generateContent.

    • Sostituiti i casi ModelContent.Part con i seguenti tipi struct conformi al protocollo Part:

      • Da .text a TextPart
      • Da .data a InlineDataPart
      • Da .fileData a FileDataPart
      • Da .functionCall a FunctionCallPart
      • Da .functionResponse a FunctionResponsePart
  • Categoria di danno

    • È stato modificato il tipo HarmCategory in modo che non sia più nidificato nel tipo SafetySetting. Se lo chiami SafetySetting.HarmCategory, puoi sostituirlo con HarmCategory.
  • Feedback sulla sicurezza

    • È stato rimosso il tipo SafetyFeedback, poiché non è stato utilizzato in nessuna delle risposte.
  • Metadati delle citazioni

    • È stata rinominata la proprietà citationSources in citations in CitationMetadata.
  • Totale caratteri fatturabili

    • È stata modificata la proprietà totalBillableCharacters in CountTokensResponse per renderla facoltativa e riflettere le situazioni in cui non vengono inviati caratteri.
  • Risposta del candidato

    • Il nome CandidateResponse è stato modificato in Candidate in modo che corrisponda a quello di altre piattaforme.
  • Configurazione della generazione

    • Modificate le proprietà pubbliche di GenerationConfig in internal. Sono tutti configurabili nell'inizializzatore.

Kotlin

  • Enumerazioni

    • Le classi enum e sealed sono state sostituite da classi regolari. Questa modifica consente una maggiore flessibilità per l'evoluzione dell'API in modo compatibile con le versioni precedenti.

    • L'enumerazione BlockThreshold è stata rinominata in HarmBlockThreshold.

    • Valori rimossi dalle seguenti enumerazioni: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason e FinishReason.

  • Metodi blob

    • Tutti i metodi che includevano Blob nel nome sono stati rinominati in modo che utilizzassero InlineData.
  • Impostazioni di sicurezza

    • Il campo method è stato modificato in modo da accettare valori nulli.
  • Classe Duration

    • Sono stati rimossi tutti gli utilizzi della classe Duration di Kotlin, che è stata sostituita con long. Questa modifica offre una migliore interoperabilità con Java.
  • Metadati delle citazioni

    • Ha incluso tutti i campi dichiarati in precedenza in CitationMetadata in una nuova classe chiamata Citation. Le citazioni sono disponibili nell'elenco citations in CitationMetadata. Questa modifica consente un migliore allineamento dei tipi tra le piattaforme.
  • Token di conteggio

    • Il campo totalBillableCharacters è stato modificato in modo da accettare valori nulli.
  • Totale caratteri fatturabili

    • È stata modificata la proprietà totalBillableCharacters in CountTokensResponse per renderla facoltativa e riflettere le situazioni in cui non vengono inviati caratteri.
  • Creazione di un'istanza di un modello

    • Il parametro requestOptions è stato spostato alla fine dell'elenco dei parametri per allinearsi ad altre piattaforme.

Java

  • Enumerazioni

    • Le classi enum e sealed sono state sostituite da classi regolari. Questa modifica consente una maggiore flessibilità per l'evoluzione dell'API in modo compatibile con le versioni precedenti.

    • L'enumerazione BlockThreshold è stata rinominata in HarmBlockThreshold.

    • Valori rimossi dalle seguenti enumerazioni: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason e FinishReason.

  • Metodi blob

    • Tutti i metodi che includevano Blob nel nome sono stati rinominati in modo che utilizzassero InlineData.
  • Impostazioni di sicurezza

    • Il campo method è stato modificato in modo da accettare valori nulli.
  • Classe Duration

    • Sono stati rimossi tutti gli utilizzi della classe Duration di Kotlin, che è stata sostituita con long. Questa modifica offre una migliore interoperabilità con Java.
  • Metadati delle citazioni

    • Ha incluso tutti i campi dichiarati in precedenza in CitationMetadata in una nuova classe chiamata Citation. Le citazioni sono disponibili nell'elenco citations in CitationMetadata. Questa modifica consente un migliore allineamento dei tipi tra le piattaforme.
  • Token di conteggio

    • Il campo totalBillableCharacters è stato modificato in modo da accettare valori nulli.
  • Totale caratteri fatturabili

    • È stata modificata la proprietà totalBillableCharacters in CountTokensResponse per renderla facoltativa e riflettere le situazioni in cui non vengono inviati caratteri.
  • Creazione di un'istanza di un modello

    • Il parametro requestOptions è stato spostato alla fine dell'elenco dei parametri per allinearsi ad altre piattaforme.

Web

Tieni presente che l'SDK client Google AI per JavaScript ha subito molte modifiche da quando sono stati creati gli SDK client Firebase AI Logic. L'elenco seguente riporta alcune potenziali modifiche che potresti dover prendere in considerazione durante la migrazione agli SDK client Firebase AI Logic.

  • Enumerazioni

    • Valori rimossi dalle seguenti enumerazioni: HarmCategory, BlockThreshold, HarmProbability, HarmSeverity, BlockReason e FinishReason.
  • Motivo del blocco

    • Il campo blockReason in PromptFeedback è ora facoltativo.
  • Grounding della ricerca

    • Sono stati rimossi tutti gli utilizzi di questa funzionalità, poiché non è ancora supportata negli SDK Firebase AI Logic.
  • Errori

    • Sono stati rimossi tutti gli utilizzi di GoogleGenerativeAIError e, facoltativamente, è stato eseguito il passaggio a AIError.

Dart

  • Enumerazioni

    • Sono stati rimossi valori dalle seguenti enumerazioni: HarmCategory, HarmProbability, BlockReason e FinishReason.
  • Parte dei dati

    • DataPart è stato rinominato in InlineDataPart e la funzione static data in inlineData per allinearsi ad altre piattaforme.
  • Opzioni di richiesta

    • RequestOptions è stato rimosso perché timeout non era funzionante. Verrà aggiunto di nuovo nel prossimo futuro, ma verrà spostato nel tipo GenerativeModel per corrispondere ad altre piattaforme.
  • Sequenze di interruzioni

    • Il parametro stopSequences in GenerationConfig è stato modificato in modo che sia facoltativo e che il valore predefinito sia null anziché un array vuoto.
  • Citazioni

    • È stata rinominata la proprietà citationSources in citations in CitationMetadata. Il tipo CitationSource è stato rinominato in Citation per corrispondere ad altre piattaforme.
  • Tipi, metodi e proprietà pubblici non necessari

    • Sono stati rimossi i seguenti tipi, metodi e proprietà che erano stati esposti involontariamente: defaultTimeout, CountTokensResponseFields, parseCountTokensResponse, parseEmbedContentResponse, parseGenerateContentResponse, parseContent, BatchEmbedContentsResponse, ContentEmbedding, EmbedContentRequest, e EmbedContentResponse.
  • Token di conteggio

    • Sono stati rimossi i campi aggiuntivi dalla funzione countTokens che non sono più necessari. È necessario solo contents.
  • Creazione di un'istanza di un modello

    • Il parametro systemInstruction è stato spostato alla fine dell'elenco dei parametri per allinearsi ad altre piattaforme.
  • Funzionalità di incorporamento

    • Rimossa la funzionalità di incorporamento non supportata (embedContent e batchEmbedContents) dal modello.

Unity

Il supporto per Unity non era disponibile negli SDK client Google AI.

Scopri come iniziare a utilizzare l'SDK Firebase AI Logic per Unity.


Fornisci un feedback sulla tua esperienza con Firebase AI Logic