Für Anwendungen, die Echtzeit- und Sprachunterstützung mit niedriger Latenz erfordern, z. B. Chatbots oder agentische Interaktionen, bietet die Gemini Live API eine optimierte Möglichkeit, sowohl Eingaben als auch Ausgaben für ein Gemini-Modell zu streamen. Mit Firebase AI Logic können Sie die Gemini Live API direkt über Ihre Android-App aufrufen, ohne eine Backend-Integration zu benötigen. In dieser Anleitung erfahren Sie, wie Sie die Gemini Live API mit Firebase AI Logic in Ihrer Android-App verwenden.
Jetzt starten
Bevor Sie beginnen, muss Ihre App auf API-Level 23 oder höher ausgerichtet sein.
Falls noch nicht geschehen, richten Sie ein Firebase-Projekt ein und verbinden Sie Ihre App mit Firebase. Weitere Informationen finden Sie in der Dokumentation zu Firebase AI Logic.
Android-Projekt einrichten
Fügen Sie die Firebase AI Logic-Bibliothek und die App Check-Abhängigkeiten der Datei build.gradle.kts oder build.gradle auf Anwendungsebene hinzu. Verwenden Sie die Firebase Android BoM, um Bibliotheksversionen zu verwalten.
dependencies {
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:35.1.0"))
// Add the dependencies for the Firebase AI Logic and App Check libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-ai")
implementation("com.google.firebase:firebase-appcheck-debug")
}
Nachdem Sie die Abhängigkeiten hinzugefügt haben, synchronisieren Sie Ihr Android-Projekt mit Gradle.
App Check-Debug-Anbieter für die lokale Entwicklung konfigurieren
Ab Anfang Juli 2026 wird Firebase App Check im Rahmen des geführten Einrichtungsworkflows für AI Logic in der Firebase Console automatisch erzwungen, um die Gemini API zu schützen. Für die lokale Entwicklung müssen Sie den Debug-Anbieter von App Check konfigurieren, um die Attestierung zu umgehen, während die Erzwingung von App Check beibehalten wird.
Konfigurieren Sie App Check in Ihrem Debug-Build so, dass die Debug-Anbieter-Factory verwendet wird:
Kotlin
Firebase.initialize(context = this) Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance(), )Java
FirebaseApp.initializeApp(/*context=*/ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance());Rufen Sie Ihr Debug-Token ab:
Führen Sie Ihre App im Emulator oder auf Ihrem Testgerät aus.
Suchen Sie in Ihren Logs nach dem App Check-Debug-Token. Beispiel:
D DebugAppCheckProvider: Enter this debug secret into the allow list in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678Kopieren Sie das Token (z. B.
123a4567-b89c-12d3-e456-789012345678).
Registrieren Sie Ihr Debug-Token bei App Check:
Rufen Sie in der Firebase Console den Tab Sicherheit > App Check > Apps auf.
Suchen Sie Ihre App, klicken Sie auf das Dreipunkt-Menü () und wählen Sie Debug-Tokens verwalten aus.
Folgen Sie der Anleitung auf dem Bildschirm, um Ihr Debug-Token zu registrieren.
Weitere Informationen zum Debug-Anbieter (einschließlich des Abrufs eines neuen Debug-Tokens) finden Sie in der offiziellen App Check-Dokumentation.
Firebase AI Logic einbinden und ein generatives Modell initialisieren
Fügen Sie der Datei AndroidManifest.xml Ihrer Anwendung die Berechtigung RECORD_AUDIO hinzu:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Initialisieren Sie den Backend-Dienst der Gemini Developer API und greifen Sie auf die LiveModel zu.
Verwenden Sie ein Modell, das die Live API unterstützt, z. B. gemini-2.5-flash-native-audio-preview-12-2025.
Informationen zu den verfügbaren Live API-Modellen finden Sie in der Firebase-Dokumentation.
Wenn Sie eine Stimme angeben möchten, legen Sie den Stimmennamen im speechConfig-Objekt als Teil der Modellkonfiguration fest. Wenn Sie keine Stimme angeben, wird standardmäßig Puck verwendet.
Kotlin
// Initialize the `LiveModel` val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) } )
Java
// Initialize the `LiveModel`
LiveGenerativeModel model = FirebaseAI
.getInstance(GenerativeBackend.googleAI())
.liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR"))
).build(),
null,
null
);
Sie können optional eine Persona oder Rolle definieren, die das Modell übernimmt, indem Sie eine Systemanweisung festlegen:
Kotlin
val systemInstruction = content { text("You are a helpful assistant, you main role is [...]") } val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) }, systemInstruction = systemInstruction, )
Java
Content systemInstruction = new Content.Builder()
.addText("You are a helpful assistant, you main role is [...]")
.build();
LiveGenerativeModel model = FirebaseAI
.getInstance(GenerativeBackend.googleAI())
.liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR"))
).build(),
tools, // null if you don't want to use function calling
systemInstruction
);
Sie können die Unterhaltung mit dem Modell weiter spezialisieren, indem Sie Systemanweisungen verwenden, um Kontext speziell für Ihre App bereitzustellen (z. B. den Verlauf der In-App-Aktivitäten des Nutzers).
Live API-Sitzung initialisieren
Nachdem Sie die LiveModel-Instanz erstellt haben, rufen Sie model.connect() auf, um ein LiveSession-Objekt zu erstellen und eine persistente Verbindung zum Modell mit Streaming mit niedriger Latenz herzustellen. Mit LiveSession können Sie mit dem Modell interagieren, indem Sie die Sprachsession starten und beenden sowie Text senden und empfangen.
Anschließend können Sie startAudioConversation() aufrufen, um die Unterhaltung mit dem Modell zu starten:
Kotlin
val session = model.connect() session.startAudioConversation()
Java
LiveModelFutures model = LiveModelFutures.from(liveModel);
ListenableFuture<LiveSession> sessionFuture = model.connect();
Futures.addCallback(sessionFuture, new FutureCallback<LiveSession>() {
@Override
public void onSuccess(LiveSession ses) {
LiveSessionFutures session = LiveSessionFutures.from(ses);
session.startAudioConversation();
}
@Override
public void onFailure(Throwable t) {
// Handle exceptions
}
}, executor);
Beachten Sie, dass das Modell in Ihren Unterhaltungen keine Unterbrechungen verarbeitet. Außerdem ist die Live API bidirektional, d. h., Sie verwenden dieselbe Verbindung zum Senden und Empfangen von Inhalten.
Sie können die Gemini Live API auch verwenden, um Audio aus verschiedenen Eingabemodalitäten zu generieren:
- Text- und Audioeingaben senden
- Senden Sie eine Videoeingabe (siehe Firebase-Kurzanleitung).
Funktionsaufrufe: Gemini Live API mit Ihrer App verbinden
Sie können das Modell auch so konfigurieren, dass es über Funktionsaufrufe direkt mit der Logik Ihrer App interagiert.
Funktionsaufrufe (oder Toolaufrufe) sind eine Funktion von generativen KI-Implementierungen, mit der das Modell Funktionen auf eigene Initiative aufrufen kann, um Aktionen auszuführen. Wenn die Funktion eine Ausgabe hat, fügt das Modell sie seinem Kontext hinzu und verwendet sie für nachfolgende Generierungen.
Wenn Sie Funktionsaufrufe in Ihrer Anwendung implementieren möchten, erstellen Sie zuerst ein FunctionDeclaration-Objekt für jede Funktion, die Sie dem Modell zur Verfügung stellen möchten.
Wenn Sie beispielsweise eine addList-Funktion, die einen String an eine Liste von Strings anhängt, für Gemini verfügbar machen möchten, erstellen Sie zuerst eine FunctionDeclaration-Variable mit einem Namen und einer kurzen Beschreibung der Funktion und ihres Parameters in einfachem Englisch:
Kotlin
val itemList = mutableListOf<String>() fun addList(item: String) { itemList.add(item) } val addListFunctionDeclaration = FunctionDeclaration( name = "addList", description = "Function adding an item the list", parameters = mapOf( "item" to Schema.string("A short string describing the item to add to the list") ) )
Java
HashMap<String, Schema> addListParams = new HashMap<String, Schema>(1);
addListParams.put("item", Schema.str("A short string describing the item to add to the list"));
FunctionDeclaration addListFunctionDeclaration = new FunctionDeclaration(
"addList",
"Function adding an item the list",
addListParams,
Collections.emptyList()
);
Übergeben Sie dann diese FunctionDeclaration als Tool an das Modell, wenn Sie es instanziieren:
Kotlin
val addListTool = Tool.functionDeclarations(listOf(addListFunctionDeclaration)) val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel( modelName = "gemini-2.5-flash-native-audio-preview-12-2025", generationConfig = liveGenerationConfig { responseModality = ResponseModality.AUDIO speechConfig = SpeechConfig(voice = Voice("FENRIR")) }, systemInstruction = systemInstruction, tools = listOf(addListTool) )
Java
LiveGenerativeModel model = FirebaseAI.getInstance(
GenerativeBackend.googleAI()).liveModel(
"gemini-2.5-flash-native-audio-preview-12-2025",
new LiveGenerationConfig.Builder()
.setResponseModality(ResponseModality.AUDIO)
.setSpeechConfig(new SpeechConfig(new Voice("FENRIR")))
.build(),
List.of(Tool.functionDeclarations(List.of(addListFunctionDeclaration))),
null,
systemInstruction
);
Implementieren Sie schließlich eine Handler-Funktion, um den Toolaufruf des Modells zu verarbeiten und die Antwort zurückzugeben. Diese Handler-Funktion, die beim Aufruf von startAudioConversation an LiveSession übergeben wird, verwendet den Parameter FunctionCallPart und gibt FunctionResponsePart zurück:
Kotlin
session.startAudioConversation(::functionCallHandler) // ... fun functionCallHandler(functionCall: FunctionCallPart): FunctionResponsePart { return when (functionCall.name) { "addList" -> { // Extract function parameter from functionCallPart val itemName = functionCall.args["item"]!!.jsonPrimitive.content // Call function with parameter addList(itemName) // Confirm the function call to the model val response = JsonObject( mapOf( "success" to JsonPrimitive(true), "message" to JsonPrimitive("Item $itemName added to the todo list") ) ) FunctionResponsePart(functionCall.name, response) } else -> { val response = JsonObject( mapOf( "error" to JsonPrimitive("Unknown function: ${functionCall.name}") ) ) FunctionResponsePart(functionCall.name, response) } } }
Java
Futures.addCallback(sessionFuture, new FutureCallback<LiveSessionFutures>() {
@RequiresPermission(Manifest.permission.RECORD_AUDIO)
@Override
@OptIn(markerClass = PublicPreviewAPI.class)
public void onSuccess(LiveSessionFutures ses) {
ses.startAudioConversation(::handleFunctionCallFuture);
}
@Override
public void onFailure(Throwable t) {
// Handle exceptions
}
}, executor);
// ...
ListenableFuture<JsonObject> handleFunctionCallFuture = Futures.transform(response, result -> {
for (FunctionCallPart functionCall : result.getFunctionCalls()) {
if (functionCall.getName().equals("addList")) {
Map<String, JsonElement> args = functionCall.getArgs();
String item =
JsonElementKt.getContentOrNull(
JsonElementKt.getJsonPrimitive(
locationJsonObject.get("item")));
return addList(item);
}
}
return null;
}, Executors.newSingleThreadExecutor());
Nächste Schritte
- In der Beispiel-App für den Android AI-Katalog können Sie die Gemini Live API ausprobieren.
- Weitere Informationen zur Gemini Live API finden Sie in der Dokumentation zu Firebase AI Logic.
- Weitere Informationen zu den verfügbaren Gemini-Modellen
- Weitere Informationen zu Funktionsaufrufen
- Strategien für das Prompt-Design