Developer Relations Engineer
L'integrazione dell'AI generativa pronta per la produzione nelle app per Android richiede molto di più della semplice connessione a un LLM: richiede sicurezza di livello enterprise e controlli dei costi. In questa sessione, scopri come Firebase AI Logic consente agli sviluppatori di eseguire il deployment di esperienze AI sicure e attente al budget su larga scala.
Tratteremo i concetti di base della sicurezza e Firebase App Check, la gestione dei costi, il routing dinamico dei modelli e lo sfruttamento delle funzionalità multimodali.
Trascrizione
Ti diamo il benvenuto all'Android Developer Summit.
Sono Ankita Saxena, Product Manager di Firebase.
E io sono Arthur Thompson, Developer Relations Engineer del team di Firebase.
Oggi ti mostreremo come aggiungere funzionalità generative alle tue app per Android.
Okay.
Che cos'è Firebase?
Alzi la mano chi ha sentito parlare di Firebase.
Ah, vedo un sacco di cose.
Ottimo.
Firebase è la piattaforma di sviluppo di app di Google.
Firebase offre una piattaforma unificata che integra oltre 20 prodotti, evitando l'esperienza frammentata che si avrebbe con altri software aggiuntivi.
Parliamo delle sfide legate all'implementazione dell'AI generativa nelle app mobile.
Abbiamo identificato le tre sfide principali.
Innanzitutto, le fughe di chiavi API: bastano pochi minuti per estrarle.
In secondo luogo, l'aggiornamento dei nomi dei modelli: consigliamo sempre agli sviluppatori di non impostarli come hardcoded nelle app, altrimenti, ogni volta che viene introdotto un nuovo modello, è necessario eseguire un'altra release.
Il terzo è la privacy dei file: diventa molto importante per qualsiasi sviluppatore o utente di app proteggere i propri dati e disporre delle giuste misure di protezione per l'app.
Presentazione di Firebase AI Logic come soluzione chiave per gestire le sfide di cui abbiamo parlato.
Qual è la proposta di valore che Firebase AI Logic ti offre?
In pratica, ci occupiamo di tutto il complesso backend personalizzato, così non devi svilupparlo tu.
In secondo luogo, utilizzando i nostri SDK client, puoi chiamare l'API Gemini direttamente e in modo sicuro dalle tue app mobile.
Diamo un'occhiata "dietro le quinte" e cerchiamo di capire come funziona l'architettura.
A sinistra, abbiamo gli SDK client di Firebase.
Oggi supportiamo un'ampia gamma di SDK client.
Voglio sottolineare che supportiamo anche Kotlin.
Quando uno sviluppatore vuole eseguire un'azione di AI, l'SDK invia la richiesta a Firebase AI Logic, che la indirizza in modo sicuro all'API Gemini Developer o all'API Gemini di Agent Platform.
In pratica, gestiamo tutto il backend personalizzato che stai creando oggi.
E il valore che ne ricaviamo è che acceleriamo il time to market a costo zero.
Ora la parte divertente.
Questa sarà una demo che mostra l'app FriendlyMeals.
A margine, utilizzeremo la stessa app per le demo rimanenti di questa sessione, quindi non esitare a scaricarla.
Puoi scansionarlo utilizzando questo codice QR.
Vediamo la demo.
L'app FriendlyMeals ti aiuta fondamentalmente a identificare le ricette in base agli ingredienti che inserisci.
Quindi, in questo flusso di lavoro, vedi i due modi per acquisire, in pratica, questi ingredienti.
Uno, inserisci gli ingredienti che hai.
In secondo luogo, scatti una foto degli ingredienti.
Utilizzerò il primo flusso di lavoro, ovvero l'inserimento degli ingredienti.
Questo è tutto ciò che ho trovato nel mio frigorifero.
Mentre viene generata la ricetta, vorrei sottolineare alcuni aspetti.
In pratica, qui stiamo chiamando i modelli Gemini.
Per questo caso d'uso specifico, chiamiamo tre Gemini 3.8 Flash.
Se guardi l'immagine in alto, questa utilizza il modello Gemini Nano Banana, ovvero Nano Banana 2.1, l'ultima versione.
Prima di passare al codice, voglio rafforzare la proposta di valore che ottieni tramite Firebase AI Logic.
Il primo sono gli SDK serverless.
Vuoi aggiungere una funzionalità di AI, ma non vuoi dover configurare un backend.
È qui che entrano in gioco i nostri SDK lato client.
Chiami direttamente Gemini dalla tua app per Android.
Il secondo è l'efficacia delle funzionalità di sicurezza integrate.
Quindi, per le tue chiamate a Gemini, puoi sfruttare elementi come Firebase App Check, i template di prompt del server e altri, e parleremo di queste funzionalità di sicurezza un po' più avanti.
In terzo luogo, il supporto di funzionalità avanzate come gli input multimodali e lo streaming.
Supponiamo che tu voglia creare un'app che aggiunga una semplice funzionalità di AI per generare una storia su uno zaino magico.
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model=Firebase.ai.generativeModel("gemini-4-argon")
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}Per aggiungere questa funzionalità di AI e renderla pronta per la produzione, bastano questi tre semplici passaggi.
Poiché Firebase AI Logic semplifica l'aggiunta di funzionalità di AI alla tua app, la prima domanda che dovresti porti è: come farai a proteggere questa funzionalità?
Passiamo quindi ai dettagli della sicurezza, a partire da Firebase App Check.
Firebase App Check ti aiuta a salvaguardare i tuoi dati, proteggere i tuoi utenti e controllare chi ha accesso alle tue risorse API attestando che le richieste provengono dalla tua app.
Si tratta di un ulteriore livello di sicurezza per contribuire a prevenire l'uso improprio della tua app.
Prima di passare al codice, devi eseguire un paio di passaggi nella console Firebase.
Quindi, in App Check nella console Firebase, vai a registrare la tua app per Android e aggiungi i rispettivi provider di attestazioni.
Ad esempio, Play Integrity o reCAPTCHA Enterprise.
Tieni presente che, una volta configurato App Check, devi iniziare con la modalità non applicata.
In questo modo, consenti alla tua app di fornire dati di telemetria per assicurarti che tutte le tue app ricevano ed eseguano correttamente le chiamate API al tuo backend prima di applicare l'applicazione.
Una volta verificato che la telemetria viene ricevuta correttamente, puoi applicare App Check. A questo punto, tutte le richieste che non hanno un token valido attestato dall'hardware verranno rifiutate.
Ecco il codice per l'implementazione di App Check.
class FireTravelApp : Application() {
lateinit var appContainer: AppContainer
private set
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Firebase.appCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
)
} else {
Firebase.appCheck.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance()
)
}
appContainer = AppContainer(this)
}
}Nella classe dell'applicazione, installi il provider App Check.
Nelle fasi di sviluppo, ti consigliamo di utilizzare il provider di debug, per poi passare a Play Integrity o reCAPTCHA Enterprise quando l'app è pronta per la produzione.
Ricorda sempre, però, che devi configurare App Check prima di effettuare qualsiasi altra chiamata Firebase.
Quando creano funzionalità di AI, gli sviluppatori spesso inseriscono i prompt direttamente nel codice delle loro app, ma questo crea due grandi sfide.
Primo: se è necessaria un'improvvisazione per il prompt, devi eseguire l'aggiornamento completo.
In secondo luogo, chiunque decomprima la tua app ha accesso al tuo prompt engineering proprietario.
Per risolvere questo problema, Firebase AI Logic utilizza i template di prompt del server.
Invece di conservare i prompt sul dispositivo, li memorizza nel cloud.
Questa è la visualizzazione dei template di prompt del server nella console Firebase.
I template vengono creati in formato .prompt.
---
model: 'gemini-3-flash'
input:
schema:...
tools:...
---
{{role "system"}}
You're a storyteller that tells nice and joyful stories with happy endings.
{{role "user"}}
Create a story about {{topic}} with the length of {{length}} words in the {{language}} language.Puoi impostare il nome del modello qui.
Puoi aggiornarla in qualsiasi momento.
Non è necessario eseguire il push dell'aggiornamento completo dell'app.
Puoi anche aggiornare le istruzioni di sistema e accettare uno schema JSON rigoroso per l'input e l'output.
Anche in questo caso, non è richiesta alcuna release dell'app.
Poiché si trova nel cloud, puoi ottimizzare un prompt o scambiare un modello istantaneamente.
Ecco come appare il codice in Kotlin.
val generativeModel = Firebase.ai.templateGenerativeModel()
val response = generativeModel.generateContent("storyteller-v1",
mapOf(
"topic" to topic,
"length" to length,
"language" to language
)
)
output.value = response.textUn aspetto da sottolineare è che i template di prompt del server sono in anteprima pubblica.
Puoi anche implementare la modalità Solo autenticazione.
Utilizza i token utente di Firebase Auth per autorizzare la richiesta.
Per completare le nostre funzionalità di sicurezza e bloccare completamente la tua applicazione, puoi anche utilizzare la modalità Solo modello direttamente dalla console Firebase.
Una volta pubblicata l'app, potresti voler ottenere visibilità sul suo comportamento.
Nella scheda Monitoraggio AI, con un solo clic puoi attivare il monitoraggio AI e configurare la frequenza di campionamento.
Firebase acquisirà automaticamente metriche, latenze e conteggi dei token senza che tu debba scrivere un codice di analisi personalizzato.
Un richiamo per menzionare le due modalità che abbiamo appena visto, entrambe disponibili nella stessa finestra.
Una volta attivato il monitoraggio AI nella console Firebase, i dati vengono inseriti direttamente nella dashboard di AI Monitoring.
Puoi osservare la latenza del 95° percentile, individuare picchi di errori improvvisi e monitorare il consumo di token in diverse modalità come testo, immagini e audio.
Puoi anche esaminare il visualizzatore di tracce per vedere determinate tracce.
In questo caso, poiché mostra il modello che stiamo utilizzando, puoi vedere la latenza e il tasso di successo.
Nella console Firebase, dove puoi ottenere tutta la telemetria e la visibilità sul funzionamento della tua funzionalità di AI.
In questo caso, supponiamo che tu veda un picco improvviso nell'utilizzo dei token o nella latenza. L'approccio ibrido è un modo per ridurre questi costi o questa latenza.
E poiché le funzionalità di AI generativa diventano una parte fondamentale delle nostre app, affidarsi al 100% solo al cloud probabilmente non è la scelta giusta.
Quindi, l'utilizzo di Nano 4, i modelli on-device su Android, sblocca tre vantaggi principali, che probabilmente conoscete già.
La prima è la modalità offline.
Quindi, che tu sia a una grande conferenza, in aereo o in metropolitana, la tua funzionalità di AI continuerà a funzionare.
Il costo.
Poiché l'inferenza viene eseguita on-device, puoi aggiungere queste funzionalità senza preoccuparti dell'aumento dei costi della funzionalità di AI.
Il terzo è la privacy dei dati.
Quindi, se si tratta di dati sensibili, puoi garantire ai tuoi utenti che nessuna inferenza lascerà il tuo dispositivo.
Quindi, utilizzando Firebase AI Logic, puoi impostare queste modalità di inferenza e avere strategie di routing chiare, come PREFER_ON_DEVICE, PREFER_IN_CLOUD o ONLY_ON_DEVICE.
Quando scegli ONLY_ON_DEVICE, l'SDK accede direttamente al modello on-device, bypassando completamente il cloud.
Passiamo allo smartphone.
Quindi, ancora una volta, andremo su FriendlyMeals e daremo un'occhiata ad alcune delle funzionalità on-device.
La prima cosa che proveremo a fare è creare una ricetta basata su alcuni degli ingredienti che potrebbero essere disponibili nel nostro frigorifero.
In precedenza, hai visto Ankita utilizzare il metodo manuale, digitando gli ingredienti e generando la ricetta.
Proviamo in un altro modo.
Prendiamo questo frigorifero molto reale, non generato.
Ci sono molte olive in questo frigorifero, quindi vediamo che tipo di ricetta viene generata.
Vorrei sottolineare un paio di cose.
La prima è che l'immagine non è mai stata trasferita dal dispositivo.
L'immagine è stata analizzata localmente da Nano by Gemma…
Nano 4.
Inoltre, il secondo aspetto è la velocità con cui è stata fornita la risposta.
Quindi, i riferimenti per i video sono stati generati.
In questo modo, ottieni due vantaggi.
I dati non lasciano il dispositivo e si registra anche una significativa riduzione della latenza.
Ok, vediamo quale ricetta otteniamo dal frigorifero pieno di olive.
Quindi, questa volta, utilizziamo il cloud.
Quindi, prendiamo gli ingredienti identificati nel frigorifero e li inviamo al cloud utilizzando Firebase AI Logic per generare una ricetta.
Non ho visto il salmone nel frigorifero, ma lo vedo nella ricetta.
Ma torniamo alle slide, per favore.
Come abbiamo visto nella demo, passare da un modello locale a un modello cloud è piuttosto semplice.
Oggi, Firebase AI Logic consente l'inferenza utilizzando il routing di base in base alla disponibilità della rete.
Per gestire questa inferenza, puoi pensare ai guardrail.
Pertanto, l'architettura include il supporto integrato per funzionalità come schemi multimodali e di input e output, nonché l'integrazione completa con Gemma, scusa, con Gemini Nano 4.
Vediamo come vengono implementati questi guardrail in pratica.
Pertanto, il routing ibrido non richiede la creazione di middleware complessi o di una logica di fallback personalizzata.
A livello di codice, si tratta solo di un parametro aggiuntivo.
Passi un parametro a un onDeviceConfig per impostare la modalità che preferisci.
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model = Firebase.ai.generativeModel(modelName = "gemini-3.8-flash",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE))
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}In questo caso, l'SDK proverà prima il modello locale e, se non è disponibile, utilizzerà automaticamente il cloud.
Ora che abbiamo visto come creare app sicure e sfruttare i modelli on-device, parliamo dell'ottimizzazione dei costi.
Le funzionalità generative possono scalare rapidamente, così come la tua fattura cloud.
Pertanto, dobbiamo disporre di misure di salvaguardia adeguate per assicurarci di avere i giusti controlli proattivi dell'infrastruttura e funzionalità automatizzate che possano contribuire a rendere i tuoi budget prevedibili e le tue applicazioni finanziariamente efficienti.
Sebbene Arthur abbia appena sottolineato che l'inferenza on-device è completamente senza costi, ci saranno sempre scenari che richiedono attività di ragionamento complesse e che richiedono anche il fallback e il routing al cloud.
Quando si verificano queste chiamate cloud, hai bisogno di misure di protezione per mantenere il tuo budget prevedibile.
È proprio per questo che entrano in gioco i limiti di spesa di Firebase.
Con i limiti di spesa, puoi avere un controllo più granulare sui costi delle tue app.
Quindi, invece di un'impostazione di budget generica a livello di progetto, con avvisi di budget che ti inviano semplicemente un'email, puoi impostare un limite di budget specifico per singoli servizi come Firebase AI Logic.
Quando la spesa raggiunge il 100%, Firebase mette automaticamente in pausa il servizio AI per evitare fatture fuori controllo.
Oltre ai semplici limiti di spesa, esistono diverse strategie avanzate di ottimizzazione dei costi.
Quello che vorremmo evidenziare oggi sono i trigger di Firebase AI Logic.
Cosa succede se hai bisogno di una logica personalizzata nel mezzo?
Questi sono i trigger di Firebase AI Logic.
Puoi eseguire una funzione prima o dopo la generazione dei contenuti.
Utilizzalo per controllare l'utente, filtrare l'input, aggiungere contesto e anche modificare la risposta.
Ora che abbiamo trattato l'ottimizzazione dei costi e la sicurezza, passiamo alla funzionalità del modello e vediamo cosa offre Firebase AI Logic.
Per supportare queste esperienze multimodali, Firebase AI Logic fornisce un catalogo completo di modelli e strumenti pronti per la produzione.
Per ragionamento, testo, codice e contenuti multimediali ad alta velocità, puoi utilizzare Gemini 4 Argon, Gemini 3.1 Pro, Gemini 3.8 Flash e altri.
Puoi anche collegare questi modelli ai dati del mondo reale utilizzando il grounding con la Ricerca e Maps.
Infine, per la voce, offriamo la sintesi vocale naturale e la generazione di audio di Gemini Live.
Passiamo ancora una volta allo smartphone.
Ecco qui i nostri piatti dolci e salati.
Oh, scusa, non quello.
Ecco il nostro toast veloce con formaggio e ketchup per la nostra ricetta.
Sembra delizioso.
La prima cosa che vogliamo esaminare è l'API Live.
In questo caso, potremo utilizzare il video che viene restituito e potrò dire: "Hey Gemini, potresti dirmi quali sono gli ingredienti sul tavolo?"
In base all'immagine sullo schermo del laptop, gli ingredienti che hai sono pane, formaggio cheddar e ketchup.
Okay.
Quindi, posso iniziare con il primo passaggio della ricetta?
Sì.
Il primo passaggio consiste nel preriscaldare il fornetto o la griglia a fuoco medio-alto.
Grazie.
Okay.
In questo caso, si trattava dell'API Live e la conversazione sarebbe rimasta aperta finché non l'avessi chiusa.
L'altro che vorrei mostrare è la trascrizione vocale o la sintesi vocale, scusate.
Con la sintesi vocale, in questo esempio, abbiamo le istruzioni della ricetta.
Quindi, invece di doverlo leggere, posso premere "Genera" o "Parla" e il testo delle istruzioni verrà inviato al modello di sintesi vocale.
Genererà l'audio e lo invierà al dispositivo.
Posso riprodurlo, memorizzarlo nella cache per un secondo momento e verrà riprodotto come vediamo qui.
1.
Preriscalda il fornetto o la griglia a fuoco medio-alto.
2.
Posiziona due fette di pane su una teglia o un vassoio per tostapane.
Bene.
Bello, vero?
Firebase AI Logic ci consente di implementare questi tipi di funzionalità interessanti con poche righe di codice.
Torniamo alle slide.
Ora che abbiamo visto nella dimostrazione come funziona l'API Gemini Live, cosa succede se vuoi creare un'esperienza conversazionale in vivavoce?
È qui che entra in gioco l'API Gemini Live, che ti consente di creare conversazioni vocali bidirezionali.
La tua app per Android può trasmettere in streaming l'audio del microfono e i frame della fotocamera in tempo reale e ricevere una risposta vocale naturale e a bassa latenza.
In Kotlin, la configurazione sembra piuttosto familiare.
val model = Firebase.ai.liveModel(
modelName = "gemini-3.1-flash-live-preview",
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
},
systemInstruction = "Your main job is to change the color...",
tools = listOf(Tool.functionDeclarations(listOf(changeColorFunction)))
)
val session = model.connect(::handler)
session.startAudioConversation(::handler)
session.stopAudioConversation()Crei un'istanza di un modello Live configurato per le risposte audio e ti connetti alla sessione con un gestore di stream.
Il punto principale che vorremmo sottolineare è che l'SDK gestisce l'intero processo di WebSocket e i protocolli di streaming in background.
Quindi non devi programmarlo, giusto?
Continua a scrivere righe.
Mentre concludiamo le nostre demo e guardiamo al futuro dello sviluppo di app, vorremmo mettere in evidenza uno strumento potente per il tuo flusso di lavoro: le skill dell'agente Firebase.
# Execute to add agent capabilities to your workspace
npx skills add firebase/agent-skillsInoltre, per chi utilizza Antigravity e Android Studio, abbiamo già integrato Firebase AI Logic direttamente nel flusso di onboarding.
Per lasciarti con tre concetti chiave: inizia a creare, affidati fin da subito agli strumenti di produzione, come quelli di sicurezza che abbiamo trattato oggi, e infine utilizza le competenze degli agenti ovunque possibile.
Grazie.
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model=Firebase.ai.generativeModel("gemini-4-argon")
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}class FireTravelApp : Application() {
lateinit var appContainer: AppContainer
private set
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Firebase.appCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
)
} else {
Firebase.appCheck.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance()
)
}
appContainer = AppContainer(this)
}
}---
model: 'gemini-3-flash'
input:
schema:...
tools:...
---
{{role "system"}}
You're a storyteller that tells nice and joyful stories with happy endings.
{{role "user"}}
Create a story about {{topic}} with the length of {{length}} words in the {{language}} language.val generativeModel = Firebase.ai.templateGenerativeModel()
val response = generativeModel.generateContent("storyteller-v1",
mapOf(
"topic" to topic,
"length" to length,
"language" to language
)
)
output.value = response.textimport com.google.firebase.Firebase
import com.google.firebase.ai.ai
@Composable
fun MagicBackpackGenerator() {
var output by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
val model = Firebase.ai.generativeModel(modelName = "gemini-3.8-flash",
onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE))
val response = model.generateContent("Write a story about a magic backpack")
output = response.text.toString()
}
MagicBackpackUI(output)
}val model = Firebase.ai.liveModel(
modelName = "gemini-3.1-flash-live-preview",
generationConfig = liveGenerationConfig {
responseModality = ResponseModality.AUDIO
},
systemInstruction = "Your main job is to change the color...",
tools = listOf(Tool.functionDeclarations(listOf(changeColorFunction)))
)
val session = model.connect(::handler)
session.startAudioConversation(::handler)
session.stopAudioConversation()# Execute to add agent capabilities to your workspace
npx skills add firebase/agent-skills