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 dava accesso a Gemini Developer API.

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

Funzionalità di sicurezza per app web e mobile

Per le app mobile e web, 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 difendere le API da usi impropri da parte di client non autorizzati.

Quando utilizzi Firebase App Check con Firebase AI Logic, non aggiungere mai la chiave API Gemini per Gemini Developer API direttamente nel codice base della tua app mobile o web. La chiave API Gemini rimane invece sul server, al riparo da utenti malintenzionati.

Ecosistema creato per app web e mobile

Firebase è la piattaforma di Google per lo sviluppo di app web e mobile. Se utilizzi Firebase AI Logic, le tue app fanno parte di un ecosistema incentrato sulle esigenze di sviluppatori e app full-stack. Ad esempio:

  • Impostare dinamicamente le configurazioni di runtime o sostituire 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 dei file (anche in condizioni di rete scadenti) e offrono una 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 di database creati per app web e mobile (ad es. Cloud Firestore).

Esegui la 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 collega la tua app a Firebase.

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

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

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

Passaggio 1: configura un progetto Firebase e collega 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 aiuta a configurare le API richieste e le risorse per il tuo progetto.

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

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

  5. Se richiesto nel flusso di lavoro della console, segui le istruzioni sullo schermo per registrare l'app e collegarla a Firebase.

  6. Continua 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 collegato 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 almeno della versione 11.13.0.

  1. In Xcode, con il progetto dell'app aperto, vai a File > Aggiungi dipendenze del pacchetto.

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

    https://github.com/firebase/firebase-ios-sdk
    
  3. Seleziona la versione più recente dell'SDK.

  4. Seleziona la raccolta 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 accesso alle API per interagire con i modelli Gemini e Imagen.

Nel file Gradle del modulo (a livello di app) (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 la versione della libreria.

dependencies {
  // ... other androidx dependencies

  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:33.14.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")
}

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

Java

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

Nel file Gradle del modulo (a livello di app) (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 la versione della libreria.

Per Java, devi aggiungere altre due librerie.

dependencies {
  // ... other androidx dependencies

  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:33.14.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")
}

Con Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase per 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 accesso alle API per interagire con i modelli Gemini e Imagen.

  1. Dalla directory del progetto Flutter, esegui il seguente comando per installare il plug-in di base 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 generato in precedenza:

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

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

    flutter run
    

Unity

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

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

Rimuovi il vecchio SDK dalla tua app

Al termine della migrazione dell'app (consulta le restanti sezioni 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 Dipendenze dei pacchetti.

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

  3. Fai clic sul pulsante - in fondo all'elenco e poi 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 di Unity non era disponibile negli SDK client di 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.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

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

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

Tieni presente che a seconda della funzionalità in uso, 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 supportarla nella tua app.

  • Esamina i seguenti elenchi per verificare eventuali modifiche che potresti dover apportare al 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 alla modalità di definizione dello schema. Ti consigliamo di consultare la guida alle chiamate delle funzioni aggiornata per scoprire come scrivere le dichiarazioni delle funzioni.

  • Generare output strutturato (ad es. JSON) utilizzando responseSchema
    Se hai implementato questa funzionalità, dovrai aggiornare la modalità di definizione dello 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 in 180 secondi.

Obbligatorio in base alla piattaforma o alla lingua

Swift

  • Enumerazioni

    • La maggior parte dei tipi enum è stata sostituita con struct con variabili statiche. Questa variazione 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 i valori sconosciuti o non gestiti, inclusi i nuovi valori aggiunti all'SDK in futuro.

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

    • Sono state rimosse le richieste unknown e unspecified dalle seguenti enumerazioni (ora struct): HarmCategory, HarmBlockThreshold, HarmProbability, BlockReason e FinishReason.

    • È stata sostituita l'enumerazione ModelContent.Part con un protocollo denominato Part per consentire l'aggiunta di nuovi tipi in modo compatibile con le versioni precedenti. Questa variazione è descritta in maggiore dettaglio 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 continueranno a generare errori se vengono utilizzate in generateContent.

    • Le caselle ModelContent.Part sono state sostituite 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 HarmCategory in modo che non sia più nidificato nel tipo SafetySetting. Se lo chiami SafetySetting.HarmCategory, questo può essere sostituito con HarmCategory.
  • Feedback sulla sicurezza

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

    • La proprietà citationSources è stata rinominata in citations in CitationMetadata.
  • Caratteri fatturabili totali

    • La proprietà totalBillableCharacters in CountTokensResponse è stata modificata in modo da essere facoltativa per riflettere le situazioni in cui non vengono inviati caratteri.
  • Risposta del candidato

    • Il nome CandidateResponse è stato rinominato in Candidate per allinearsi alle altre piattaforme.
  • Configurazione della generazione

    • Le proprietà pubbliche di GenerationConfig sono state modificate in internal. Rimangono tutti configurabili nell'inizializzatore.

Kotlin

  • Enumerazioni

    • I corsi enum e sealed sono stati sostituiti da corsi regolari. Questa variazione consente una maggiore flessibilità per l'evoluzione dell'API in modo compatibile con le versioni precedenti.

    • L'enumerazione BlockThreshold è stata rinominata in HarmBlockThreshold.

    • Sono stati rimossi i valori dalle seguenti enumerazioni: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason e FinishReason.

  • Metodi blob

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

    • Il campo method è stato modificato in modo da poter essere null.
  • Classe Duration

    • Sono stati rimossi tutti gli utilizzi della classe Duration di Kotlin e sostituiti con long. Questa modifica offre una migliore interoperabilità con Java.
  • Metadati delle citazioni

    • Ho inserito tutti i campi precedentemente dichiarati in CitationMetadata in una nuova classe denominata Citation. Le citazioni sono disponibili nell'elenco chiamato citations in CitationMetadata. Questa modifica consente un migliore allineamento tra i tipi su più piattaforme.
  • Conteggio token

    • Il campo totalBillableCharacters è stato modificato in modo da poter essere null.
  • Caratteri fatturabili totali

    • La proprietà totalBillableCharacters in CountTokensResponse è stata modificata in modo da essere facoltativa per riflettere le situazioni in cui non vengono inviati caratteri.
  • Istanziazione di un modello

    • Il parametro requestOptions è stato spostato alla fine dell'elenco dei parametri in modo da allinearsi alle altre piattaforme.

Java

  • Enumerazioni

    • I corsi enum e sealed sono stati sostituiti da corsi regolari. Questa variazione consente una maggiore flessibilità per l'evoluzione dell'API in modo compatibile con le versioni precedenti.

    • L'enumerazione BlockThreshold è stata rinominata in HarmBlockThreshold.

    • Sono stati rimossi i valori dalle seguenti enumerazioni: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason e FinishReason.

  • Metodi blob

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

    • Il campo method è stato modificato in modo da poter essere null.
  • Classe Duration

    • Sono stati rimossi tutti gli utilizzi della classe Duration di Kotlin e sostituiti con long. Questa modifica offre una migliore interoperabilità con Java.
  • Metadati delle citazioni

    • Ho inserito tutti i campi precedentemente dichiarati in CitationMetadata in una nuova classe denominata Citation. Le citazioni sono disponibili nell'elenco chiamato citations in CitationMetadata. Questa modifica consente un migliore allineamento tra i tipi su più piattaforme.
  • Conteggio token

    • Il campo totalBillableCharacters è stato modificato in modo da poter essere null.
  • Caratteri fatturabili totali

    • La proprietà totalBillableCharacters in CountTokensResponse è stata modificata in modo da essere facoltativa per riflettere le situazioni in cui non vengono inviati caratteri.
  • Istanziazione di un modello

    • Il parametro requestOptions è stato spostato alla fine dell'elenco dei parametri in modo da allinearsi alle altre piattaforme.

Web

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

  • Enumerazioni

    • Sono stati rimossi i valori dalle seguenti enumerazioni: HarmCategory, BlockThreshold, HarmProbability, HarmSeverity, BlockReason e FinishReason.
  • Motivo del blocco

    • blockReason in PromptFeedback è stato modificato in modo da essere facoltativo.
  • Grounding della ricerca

    • Sono stati rimossi tutti gli utilizzi di questa funzionalità, poiché non è ancora supportata negli SDK di 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 i valori dalle seguenti enumerazioni: HarmCategory, HarmProbability, BlockReason e FinishReason.
  • Parte di dati

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

    • È stato rimosso RequestOptions perché timeout non era funzionale. Verrà nuovamente aggiunto nel prossimo futuro, ma verrà spostato nel tipo GenerativeModel in modo da essere compatibile con le altre piattaforme.
  • Sequenze di interruzioni

    • Il parametro stopSequences in GenerationConfig è stato modificato in modo da essere facoltativo e avere come valore predefinito null anziché un array vuoto.
  • Citazioni

    • La proprietà citationSources è stata rinominata in citations in CitationMetadata. Il tipo CitationSource è stato rinominato Citation per allinearsi alle altre piattaforme.
  • Tipi, metodi e proprietà pubblici non necessari

    • Sono stati rimossi i seguenti tipi, metodi e proprietà che sono stati esposti involontariamente: defaultTimeout, CountTokensResponseFields, parseCountTokensResponse, parseEmbedContentResponse, parseGenerateContentResponse, parseContent, BatchEmbedContentsResponse, ContentEmbedding, EmbedContentRequest, e EmbedContentResponse.
  • Conteggio token

    • Sono stati rimossi dalla funzione countTokens i campi aggiuntivi non più necessari. È necessario solo contents.
  • Istanziazione di un modello

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

    • È stata rimossa dal modello la funzionalità di embedding non supportata (embedContent e batchEmbedContents).

Unity

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

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


Inviare un feedback sulla tua esperienza con Firebase AI Logic