Tüm Yazılar
KategoriAI
Okuma Süresi
24 dk okuma
Yayın Tarihi
...
Kelime Sayısı
2.010kelime

Kahveni hazırla - bu içerikli bir makale!

Firebase SDK üzerinden Gemini API entegrasyonu, function calling, safety settings, streaming ve iOS/Android/Flutter için production-ready AI uygulama rehberi.

Firebase AI Logic: Gemini Entegrasyonu ile Mobil AI

# Firebase AI Logic: Gemini Entegrasyonu ile Mobil AI

Google, 2025'te Firebase AI Logic'i duyurarak mobil geliştiricilerin Gemini modellerine doğrudan Firebase SDK üzerinden erişmesini sağladı. Artık ayrı bir Vertex AI hesabı açmana, API key yönetimi yapmanaa veya karmaşık backend proxy'ler kurmana gerek yok. Firebase projenin içinden, App Check koruması altında, Gemini'nin tüm gücünü kullanabilirsin. Gelin, Firebase AI Logic'in mimarisini, function calling yeteneklerini, güvenlik ayarlarını ve iOS/Android/Flutter'da nasıl kullanacağını detaylıca inceleyelim.

💡 Not: Firebase AI Logic, eski adıyla "Vertex AI in Firebase" olarak biliniyordu. Google, Mayıs 2025'te Gemini Developer API desteği ekleyerek adını Firebase AI Logic olarak güncelledi. Resmi dokümantasyon: Firebase AI Logic Docs, kaynak kod: GitHub.

İçindekiler


Firebase AI Logic Nedir?

Firebase AI Logic, Gemini API'ye Firebase SDK üzerinden erişim sağlayan bir servis. İki API backend'i destekliyor:

Özellik
Gemini Developer API
Vertex AI Gemini API
**Fiyat**
Ücretsiz tier var
Kullanıma göre
**Rate Limit**
15 RPM (ücretsiz)
Yüksek limitler
**Model Seçimi**
Gemini 2.0 Flash, Pro
Tüm Gemini modelleri
**Grounding**
Google Search
Google Search + özel
**Enterprise**
Hayır
Evet, SLA dahil
**Data Governance**
Standart
VPC, CMEK desteği

Ne Zaman Hangisi?

  • Prototipleme / Hobi:: Gemini Developer API (ücretsiz)
  • Production / Enterprise:: Vertex AI Gemini API (ölçeklenebilir)

Firebase AI Logic'in güzelliği, ikisi arasında tek satır kod değişikliği ile geçiş yapabilmen. Backend'i değiştirirsin, istemci kodu aynı kalır. Vertex AI detayları için Google Cloud AI sayfasına göz atabilirsin. Claude Opus gibi rakip modeller de benzer API yapısı sunuyor — farklılıkları bilmek entegrasyon kararlarında faydalı.


Mimari ve API Seçimi

Firebase AI Logic'in mimarisi şöyle çalışır:

  1. Mobil uygulama → Firebase SDK → Firebase AI Logic servisi
  2. Firebase AI Logic → App Check doğrulama → API seçimi
  3. Gemini Developer API veya Vertex AI → Model çalıştırma
  4. Sonuç → Firebase SDK → Mobil uygulama

Bu mimari sayesinde API key'lerin asla istemci tarafında açığa çıkmaz. Firebase App Check, her isteğin gerçek bir uygulamadan geldiğini doğrular.

Firebase + Gemini Hızlı Entegrasyon

\\\`typescript

// Firebase AI Logic — Gemini entegrasyonu (minimal başlangıç)

import { initializeApp } from 'firebase/app';

import { getAI, getGenerativeModel, GoogleAIBackend } from 'firebase/ai';

const app = initializeApp(firebaseConfig);

const ai = getAI(app, { backend: new GoogleAIBackend() });

const model = getGenerativeModel(ai, { model: 'gemini-2.0-flash' });

// Basit text generation

const result = await model.generateContent('iOS 18 yeniliklerini özetle');

console.log(result.response.text());

// Streaming response için

const stream = await model.generateContentStream('Swift Concurrency nedir?');

for await (const chunk of stream.stream) {

process.stdout.write(chunk.text());

}

\\\`

Bu entegrasyonun en önemli avantajı: API key client'ta hiç açığa çıkmaz, Firebase App Check tüm isteklerin gerçek uygulamadan geldiğini doğrular.


Kurulum

\\\`typescript

// Firebase Console'da AI Logic'i etkinleştir

// 1. Firebase Console > AI Logic

// 2. Gemini Developer API veya Vertex AI seç

// 3. Billing etkinleştir (Vertex AI için)

// Web SDK kurulumu

import { initializeApp } from 'firebase/app';

import { getAI, getGenerativeModel, GoogleAIBackend } from 'firebase/ai';

const app = initializeApp(firebaseConfig);

const ai = getAI(app, { backend: new GoogleAIBackend() });

const model = getGenerativeModel(ai, {

model: 'gemini-2.0-flash',

});

// Basit kullanım

const result = await model.generateContent('Merhaba! Nasılsın?');

console.log(result.response.text());

\\\`

🔍 Pro Tip: Gemini Developer API ile başla, production'a geçtiğinde backend'i \VertexAIBackend\ olarak değiştir. Tüm istemci kodu aynı kalır, sadece backend class'ını değiştirirsin.

iOS'ta Gemini Entegrasyonu

Swift ile Firebase AI Logic entegrasyonu oldukça temiz. iOS Security yazımızdaki güvenlik prensiplerini burada da uyguluyoruz.

Swift Implementasyonu

\\\`swift

import FirebaseAI

// Singleton AI Service

final class AIService {

static let shared = AIService()

private let model: GenerativeModel

private init() {

let ai = FirebaseAI.firebaseAI(backend: .googleAI())

self.model = ai.generativeModel(modelName: "gemini-2.0-flash")

}

// Basit text generation

func generateText(prompt: String) async throws -> String {

let response = try await model.generateContent(prompt)

guard let text = response.text else {

throw AIError.emptyResponse

}

return text

}

// Streaming response

func streamText(prompt: String) -> AsyncThrowingStream<String, Error> {

AsyncThrowingStream { continuation in

Task {

do {

let stream = try model.generateContentStream(prompt)

for try await chunk in stream {

if let text = chunk.text {

continuation.yield(text)

}

}

continuation.finish()

} catch {

continuation.finish(throwing: error)

}

}

}

}

// Multimodal: Görsel + Text

func analyzeImage(_ image: UIImage, prompt: String) async throws -> String {

guard let imageData = image.jpegData(compressionQuality: 0.8) else {

throw AIError.invalidImage

}

let imagePart = ModelContent.Part.data(

mimetype: "image/jpeg",

imageData

)

let textPart = ModelContent.Part.text(prompt)

let response = try await model.generateContent([imagePart, textPart])

return response.text ?? ""

}

}

enum AIError: LocalizedError {

case emptyResponse

case invalidImage

var errorDescription: String? {

switch self {

case .emptyResponse: return "AI boş yanıt döndü"

case .invalidImage: return "Geçersiz görsel formatı"

}

}

}

\\\`

SwiftUI View ile Kullanım

\\\`swift

import SwiftUI

struct AIChatView: View {

@State private var prompt = ""

@State private var response = ""

@State private var isLoading = false

@State private var streamedText = ""

var body: some View {

VStack(spacing: 16) {

ScrollView {

Text(streamedText.isEmpty ? response : streamedText)

.padding()

}

HStack {

TextField("Sorunuzu yazın...", text: $prompt)

.textFieldStyle(.roundedBorder)

Button("Gönder") {

Task { await sendPrompt() }

}

.disabled(prompt.isEmpty || isLoading)

}

.padding()

}

}

private func sendPrompt() async {

isLoading = true

streamedText = ""

let stream = AIService.shared.streamText(prompt: prompt)

do {

for try await chunk in stream {

streamedText += chunk

}

response = streamedText

} catch {

response = "Hata: \(error.localizedDescription)"

}

isLoading = false

prompt = ""

}

}

\\\`


Flutter'da Gemini Entegrasyonu

Flutter ile Firebase AI Logic kullanımı da benzer şekilde kolay. Flutter Clean Architecture prensipleri ile yapılandıralım.

Dart Implementasyonu

\\\`dart

import 'package:firebase_ai/firebase_ai.dart';

import 'package:firebase_core/firebase_core.dart';

class GeminiService {

late final GenerativeModel _model;

late final GenerativeModel _visionModel;

Future<void> initialize() async {

final ai = FirebaseAI.googleAI();

_model = ai.generativeModel(

model: 'gemini-2.0-flash',

generationConfig: GenerationConfig(

temperature: 0.7,

topP: 0.9,

topK: 40,

maxOutputTokens: 2048,

),

);

_visionModel = ai.generativeModel(

model: 'gemini-2.0-flash',

);

}

// Streaming chat

Stream<String> chatStream(String message, List<Content> history) async* {

final chat = _model.startChat(history: history);

final stream = chat.sendMessageStream(Content.text(message));

await for (final chunk in stream) {

if (chunk.text != null) {

yield chunk.text!;

}

}

}

// Token sayımı

Future<int> countTokens(String text) async {

final response = await _model.countTokens([Content.text(text)]);

return response.totalTokens;

}

}

\\\`

🔍 Pro Tip: Token sayımını her istek öncesi kontrol et. Gemini 2.0 Flash'ın context window'u 1M token ama maliyet token başına hesaplanıyor. Gereksiz uzun prompt'lardan kaçın. Flutter Riverpod ile state yönetimini de düzgün kur.

Function Calling ile Tool Use

Function calling, Gemini'nin en güçlü özelliklerinden biri. Model, doğal dil isteğini analiz edip uygun fonksiyonu çağırır.

Hava Durumu Örneği

\\\`typescript

import { getAI, getGenerativeModel, GoogleAIBackend } from 'firebase/ai';

import {

FunctionDeclarationSchemaType,

} from 'firebase/ai';

const weatherTool = {

functionDeclarations: [{

name: 'getWeather',

description: 'Belirtilen şehir için güncel hava durumunu getirir',

parameters: {

type: FunctionDeclarationSchemaType.OBJECT,

properties: {

city: {

type: FunctionDeclarationSchemaType.STRING,

description: 'Şehir adı (örn: İstanbul)',

},

unit: {

type: FunctionDeclarationSchemaType.STRING,

enum: ['celsius', 'fahrenheit'],

description: 'Sıcaklık birimi',

},

},

required: ['city'],

},

}],

};

const model = getGenerativeModel(ai, {

model: 'gemini-2.0-flash',

tools: [weatherTool],

});

// Kullanıcı: "İstanbul'da hava nasıl?"

const result = await model.generateContent(

"İstanbul'da bugün hava nasıl?"

);

const call = result.response.functionCalls()?.[0];

if (call?.name === 'getWeather') {

// API çağrısı yap

const weather = await fetchWeather(call.args.city, call.args.unit);

// Sonucu modele geri gönder

const finalResult = await model.generateContent([

{ role: 'user', parts: [{ text: "İstanbul'da bugün hava nasıl?" }] },

{ role: 'model', parts: [{ functionCall: call }] },

{ role: 'user', parts: [{ functionResponse: {

name: 'getWeather',

response: weather,

}}] },

]);

console.log(finalResult.response.text());

// "İstanbul'da bugün 18°C ve güneşli bir hava var..."

}

\\\`

Function Calling Kullanım Alanları

Kullanım
Fonksiyon
Açıklama
E-ticaret
searchProducts
Ürün arama ve filtreleme
Finans
getStockPrice
Anlık hisse fiyatı
Sağlık
bookAppointment
Randevu oluşturma
Seyahat
findFlights
Uçuş arama
Destek
createTicket
Destek talebi açma

Safety Settings ve Content Filtering

Production'da AI kullanırken güvenlik kritik. Firebase AI Logic, yerleşik safety settings sunuyor:

\\\`typescript

import {

HarmCategory,

HarmBlockThreshold,

} from 'firebase/ai';

const model = getGenerativeModel(ai, {

model: 'gemini-2.0-flash',

safetySettings: [

{

category: HarmCategory.HARM_CATEGORY_HARASSMENT,

threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,

},

{

category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,

threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,

},

{

category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,

threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,

},

{

category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,

threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,

},

],

generationConfig: {

temperature: 0.3, // Düşük = daha tutarlı

topP: 0.8,

maxOutputTokens: 1024,

},

});

\\\`

App Check Entegrasyonu

\\\`swift

// iOS'ta App Check zorunlu

import FirebaseAppCheck

class AppCheckProviderFactory: NSObject, AppCheckProviderFactory {

func createProvider(with app: FirebaseApp) -> AppCheckProvider? {

if #available(iOS 14.0, *) {

return AppAttestProvider(app: app)

} else {

return DeviceCheckProvider(app: app)

}

}

}

// AppDelegate'te

AppCheck.setAppCheckProviderFactory(AppCheckProviderFactory())

\\\`

🔍 Pro Tip: App Check olmadan Firebase AI Logic çağrılarını production'da AÇMA. Kötü niyetli kullanıcılar API'ni spam'leyerek fatura şişirebilir. Debug modunda App Check debug provider kullan.

Streaming ve Multimodal

Gemini'nin multimodal yetenekleri mobil uygulamalar için devrim niteliğinde:

Desteklenen Modlar

  • Text → Text:: Soru-cevap, özetleme, çeviri
  • Image → Text:: Görsel analiz, OCR, ürün tanıma
  • Audio → Text:: Ses transkripsiyonu, duygu analizi
  • Video → Text:: Video özetleme, sahne analizi
  • Text → Image:: Imagen ile görsel üretme (Gemini 2.0)
  • Document → Text:: PDF analiz, form çıkarma

Akış Yanıtı ile Kullanıcı Deneyimi

Kullanıcılar ChatGPT'de gördükleri "yazıyor..." efektini bekler. Streaming ile bunu sağlarsın:

\\\`typescript

// Web'de streaming

const result = await model.generateContentStream(prompt);

let fullText = '';

for await (const chunk of result.stream) {

const text = chunk.text();

fullText += text;

updateUI(fullText); // Her chunk'ta UI güncelle

}

\\\`


Production Best Practices

Maliyet Kontrolü

  1. Token limiti koy — maxOutputTokens ile sınırla
  2. Cache kullan — Aynı sorgu için tekrar API çağrısı yapma
  3. Model seçimi — Flash modeller Pro'dan 10x ucuz
  4. Batch processing — Toplu istekleri grupla

Hata Yönetimi

\\\`typescript

try {

const result = await model.generateContent(prompt);

return result.response.text();

} catch (error: unknown) {

if (error instanceof Error) {

if (error.message.includes('SAFETY')) {

// Safety filtre tetiklendi

return 'Bu içerik güvenlik filtresine takıldı.';

}

if (error.message.includes('QUOTA')) {

// Rate limit aşıldı

await delay(1000);

return retry(prompt);

}

}

throw error;

}

\\\`


Sonuç ve Öneriler

Firebase AI Logic, mobil geliştiriciler için AI entegrasyonunu demokratikleştiriyor. Firebase SDK'nın tanıdık yapısı, App Check güvenliği ve Gemini'nin multimodal gücü ile production-ready AI uygulamaları çok daha kolay. Firebase Advanced yazımızda ele aldığımız Firestore + Cloud Functions altyapısının üzerine AI Logic eklemek, uygulamanı bir sonraki seviyeye taşır.

Öneriler

  1. Gemini Developer API ile başla — Ücretsiz tier ile prototiple
  2. Function calling kullan — Modeli uygulamanın araçlarıyla bağla
  3. Streaming zorunlu — Kullanıcı deneyimi için şart
  4. Safety settings production'da sık — Minimum BLOCK_LOW_AND_ABOVE
  5. App Check AÇIK — Maliyet koruması için zorunlu

ALTIN İPUCU

Bu yazının en değerli bilgisi

Bu ipucu, yazının en önemli çıkarımını içeriyor.

Easter Egg

Gizli bir bilgi buldun!

Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?

Okuyucu Ödülü

Firebase AI Logic + Cloud Functions combo'su: Edge'de (mobilde) basit sorguları Gemini Developer API ile işle, karmaşık veya batch işlemleri Cloud Functions'da Vertex AI ile yap. Bu "hibrit AI" mimarisi hem maliyeti düşürür hem de offline durumda graceful degradation sağlar. Cloud Functions'da \`@google-cloud/vertexai\` ile aynı modeli kullanabilirsin — böylece prompt engineering tek yerde kalır.

Etiketler

#Firebase#Gemini#AI#iOS#Android#Flutter#Function Calling
Muhittin Çamdalı

Muhittin Çamdalı

Senior iOS Developer

12+ yıllık deneyime sahip iOS Developer. Swift, SwiftUI ve modern iOS mimarileri konusunda uzman. Apple platformlarında performanslı ve kullanıcı dostu uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.

Paylaş

Bunu da begenebilirsiniz