Tüm Yazılar
KategoriAI
Okuma Süresi
24 dk
Yayın Tarihi
2026-02-13
Kelime Sayısı
2.010kelime

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

Firebase AI Logic: Gemini Entegrasyonu ile Mobil AI

Özet

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 Developer API ile Vertex AI arasında tek satırla geçiş sağlıyor.
  • Gemini Developer API ücretsiz tier'da 15 RPM limit sunarken Vertex AI daha yüksek limit ve SLA sağlıyor.
  • iOS/Flutter SDK'ları text generation, streaming ve multimodal (görsel+metin) analiz destekliyor.
  • App Check zorunlu tutuluyor; API key client'ta açığa çıkmıyor, safety settings ile içerik filtreleniyor.
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
1// Firebase AI Logic — Gemini entegrasyonu (minimal başlangıç)
2import { initializeApp } from 'firebase/app';
3import { getAI, getGenerativeModel, GoogleAIBackend } from 'firebase/ai';
4 
5const app = initializeApp(firebaseConfig);
6const ai = getAI(app, { backend: new GoogleAIBackend() });
7const model = getGenerativeModel(ai, { model: 'gemini-2.0-flash' });
8 
9// Basit text generation
10const result = await model.generateContent('iOS 18 yeniliklerini özetle');
11console.log(result.response.text());
12 
13// Streaming response için
14const stream = await model.generateContentStream('Swift Concurrency nedir?');
15for await (const chunk of stream.stream) {
16 process.stdout.write(chunk.text());
17}

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
1// Firebase Console'da AI Logic'i etkinleştir
2// 1. Firebase Console > AI Logic
3// 2. Gemini Developer API veya Vertex AI seç
4// 3. Billing etkinleştir (Vertex AI için)
5 
6// Web SDK kurulumu
7import { initializeApp } from 'firebase/app';
8import { getAI, getGenerativeModel, GoogleAIBackend } from 'firebase/ai';
9 
10const app = initializeApp(firebaseConfig);
11const ai = getAI(app, { backend: new GoogleAIBackend() });
12 
13const model = getGenerativeModel(ai, {
14 model: 'gemini-2.0-flash',
15});
16 
17// Basit kullanım
18const result = await model.generateContent('Merhaba! Nasılsın?');
19console.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
1import FirebaseAI
2 
3// Singleton AI Service
4final class AIService {
5 static let shared = AIService()
6 private let model: GenerativeModel
7 
8 private init() {
9 let ai = FirebaseAI.firebaseAI(backend: .googleAI())
10 self.model = ai.generativeModel(modelName: "gemini-2.0-flash")
11 }
12 
13 // Basit text generation
14 func generateText(prompt: String) async throws -> String {
15 let response = try await model.generateContent(prompt)
16 guard let text = response.text else {
17 throw AIError.emptyResponse
18 }
19 return text
20 }
21 
22 // Streaming response
23 func streamText(prompt: String) -> AsyncThrowingStream<String, Error> {
24 AsyncThrowingStream { continuation in
25 Task {
26 do {
27 let stream = try model.generateContentStream(prompt)
28 for try await chunk in stream {
29 if let text = chunk.text {
30 continuation.yield(text)
31 }
32 }
33 continuation.finish()
34 } catch {
35 continuation.finish(throwing: error)
36 }
37 }
38 }
39 }
40 
41 // Multimodal: Görsel + Text
42 func analyzeImage(_ image: UIImage, prompt: String) async throws -> String {
43 guard let imageData = image.jpegData(compressionQuality: 0.8) else {
44 throw AIError.invalidImage
45 }
46 
47 let imagePart = ModelContent.Part.data(
48 mimetype: "image/jpeg",
49 imageData
50 )
51 let textPart = ModelContent.Part.text(prompt)
52 
53 let response = try await model.generateContent([imagePart, textPart])
54 return response.text ?? ""
55 }
56}
57 
58enum AIError: LocalizedError {
59 case emptyResponse
60 case invalidImage
61 
62 var errorDescription: String? {
63 switch self {
64 case .emptyResponse: return "AI boş yanıt döndü"
65 case .invalidImage: return "Geçersiz görsel formatı"
66 }
67 }
68}

SwiftUI View ile Kullanım

swift
1import SwiftUI
2 
3struct AIChatView: View {
4 @State private var prompt = ""
5 @State private var response = ""
6 @State private var isLoading = false
7 @State private var streamedText = ""
8 
9 var body: some View {
10 VStack(spacing: 16) {
11 ScrollView {
12 Text(streamedText.isEmpty ? response : streamedText)
13 .padding()
14 }
15 
16 HStack {
17 TextField("Sorunuzu yazın...", text: $prompt)
18 .textFieldStyle(.roundedBorder)
19 
20 Button("Gönder") {
21 Task { await sendPrompt() }
22 }
23 .disabled(prompt.isEmpty || isLoading)
24 }
25 .padding()
26 }
27 }
28 
29 private func sendPrompt() async {
30 isLoading = true
31 streamedText = ""
32 
33 let stream = AIService.shared.streamText(prompt: prompt)
34 do {
35 for try await chunk in stream {
36 streamedText += chunk
37 }
38 response = streamedText
39 } catch {
40 response = "Hata: \(error.localizedDescription)"
41 }
42 
43 isLoading = false
44 prompt = ""
45 }
46}

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
1import 'package:firebase_ai/firebase_ai.dart';
2import 'package:firebase_core/firebase_core.dart';
3 
4class GeminiService {
5 late final GenerativeModel _model;
6 late final GenerativeModel _visionModel;
7 
8 Future<void> initialize() async {
9 final ai = FirebaseAI.googleAI();
10 
11 _model = ai.generativeModel(
12 model: 'gemini-2.0-flash',
13 generationConfig: GenerationConfig(
14 temperature: 0.7,
15 topP: 0.9,
16 topK: 40,
17 maxOutputTokens: 2048,
18 ),
19 );
20 
21 _visionModel = ai.generativeModel(
22 model: 'gemini-2.0-flash',
23 );
24 }
25 
26 // Streaming chat
27 Stream<String> chatStream(String message, List<Content> history) async* {
28 final chat = _model.startChat(history: history);
29 final stream = chat.sendMessageStream(Content.text(message));
30 
31 await for (final chunk in stream) {
32 if (chunk.text != null) {
33 yield chunk.text!;
34 }
35 }
36 }
37 
38 // Token sayımı
39 Future<int> countTokens(String text) async {
40 final response = await _model.countTokens([Content.text(text)]);
41 return response.totalTokens;
42 }
43}
🔍 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
1import { getAI, getGenerativeModel, GoogleAIBackend } from 'firebase/ai';
2import {
3 FunctionDeclarationSchemaType,
4} from 'firebase/ai';
5 
6const weatherTool = {
7 functionDeclarations: [{
8 name: 'getWeather',
9 description: 'Belirtilen şehir için güncel hava durumunu getirir',
10 parameters: {
11 type: FunctionDeclarationSchemaType.OBJECT,
12 properties: {
13 city: {
14 type: FunctionDeclarationSchemaType.STRING,
15 description: 'Şehir adı (örn: İstanbul)',
16 },
17 unit: {
18 type: FunctionDeclarationSchemaType.STRING,
19 enum: ['celsius', 'fahrenheit'],
20 description: 'Sıcaklık birimi',
21 },
22 },
23 required: ['city'],
24 },
25 }],
26};
27 
28const model = getGenerativeModel(ai, {
29 model: 'gemini-2.0-flash',
30 tools: [weatherTool],
31});
32 
33// Kullanıcı: "İstanbul'da hava nasıl?"
34const result = await model.generateContent(
35 "İstanbul'da bugün hava nasıl?"
36);
37 
38const call = result.response.functionCalls()?.[0];
39if (call?.name === 'getWeather') {
40 // API çağrısı yap
41 const weather = await fetchWeather(call.args.city, call.args.unit);
42 
43 // Sonucu modele geri gönder
44 const finalResult = await model.generateContent([
45 { role: 'user', parts: [{ text: "İstanbul'da bugün hava nasıl?" }] },
46 { role: 'model', parts: [{ functionCall: call }] },
47 { role: 'user', parts: [{ functionResponse: {
48 name: 'getWeather',
49 response: weather,
50 }}] },
51 ]);
52 
53 console.log(finalResult.response.text());
54 // "İstanbul'da bugün 18°C ve güneşli bir hava var..."
55}

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
1import {
2 HarmCategory,
3 HarmBlockThreshold,
4} from 'firebase/ai';
5 
6const model = getGenerativeModel(ai, {
7 model: 'gemini-2.0-flash',
8 safetySettings: [
9 {
10 category: HarmCategory.HARM_CATEGORY_HARASSMENT,
11 threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
12 },
13 {
14 category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
15 threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
16 },
17 {
18 category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
19 threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
20 },
21 {
22 category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
23 threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
24 },
25 ],
26 generationConfig: {
27 temperature: 0.3, // Düşük = daha tutarlı
28 topP: 0.8,
29 maxOutputTokens: 1024,
30 },
31});

App Check Entegrasyonu

swift
1// iOS'ta App Check zorunlu
2import FirebaseAppCheck
3 
4class AppCheckProviderFactory: NSObject, AppCheckProviderFactory {
5 func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
6 if #available(iOS 14.0, *) {
7 return AppAttestProvider(app: app)
8 } else {
9 return DeviceCheckProvider(app: app)
10 }
11 }
12}
13 
14// AppDelegate'te
15AppCheck.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
1// Web'de streaming
2const result = await model.generateContentStream(prompt);
3 
4let fullText = '';
5for await (const chunk of result.stream) {
6 const text = chunk.text();
7 fullText += text;
8 updateUI(fullText); // Her chunk'ta UI güncelle
9}

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
1try {
2 const result = await model.generateContent(prompt);
3 return result.response.text();
4} catch (error: unknown) {
5 if (error instanceof Error) {
6 if (error.message.includes('SAFETY')) {
7 // Safety filtre tetiklendi
8 return 'Bu içerik güvenlik filtresine takıldı.';
9 }
10 if (error.message.includes('QUOTA')) {
11 // Rate limit aşıldı
12 await delay(1000);
13 return retry(prompt);
14 }
15 }
16 throw error;
17}

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ı

Lead Mobile Engineer

12+ yıllık deneyime sahip Lead Mobile Engineer. Swift, SwiftUI, Kotlin ve Flutter ile iOS, Android ve cross-platform mimarilerde uzman. Performanslı ve kullanıcı dostu mobil uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

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

Onay e-postasındaki bağlantıyı açıp “Aboneliğimi onayla” düğmesine bastığında aboneliğin başlar. Bültende açılma/tıklama istatistikleri tutulur; dilediğin an tek tıkla ayrılabilirsin. Gizlilik

Paylaş

İlgili İçerik