Muzibu Mobil Uygulama Analizi

Kapsamlı Teknik Doküman & Geliştirme Planı

17 Mart 2026
v2.0

Yönetici Özeti

30.000+
Şarkı
125.000+
Playlist
10-15
Saat/Gün
B2B
İş Modeli

Ne Yapıyoruz?

Muzibu, işletmelere (kafe, restoran, otel, ofis) kesintisiz arka plan müziği sunan bir B2B platformudur. Kullanıcılar sabah uygulamayı açar, müziği başlatır ve gün boyu (10-15 saat) hiç dokunmadan çalmasını bekler.

Mobil uygulama, web sitesiyle aynı deneyimi sunmalı: Sabah aç, akşama kadar donmadan çalsın.

Teknoloji Seçimi: Flutter

Google'ın cross-platform framework'ü

Tek codebase, iki platform
Native performans
Güçlü audio kütüphaneleri

1. Hedef & Vizyon

Tipik Kullanıcı Senaryosu

08:00
Kafe açılıyor
Uygulama açılır, müzik başlar
08:00-22:00
Gün boyu
Kesintisiz müzik çalar
22:00
Kafe kapanıyor
Uygulama kapatılır

Hedef Kullanıcı Profili

Cihaz Durumu

  • • 5-7 yıllık eski iPad/Android tablet
  • • 2-3 GB RAM (düşük bellek)
  • • Genellikle prize takılı (şarj sorunu yok)

İnternet Durumu

  • • Yavaş veya düzensiz bağlantı
  • • WiFi kesintileri olabilir
  • • Bazen 3G/4G'ye düşer

Kullanıcı Profili

  • • Teknik bilgisi düşük
  • • "Tek tıkla çalsın" beklentisi
  • • Sorun çözme kapasitesi sınırlı

Kritik Beklenti

  • ASLA donmamalı
  • ASLA sessiz kalmamalı
  • ASLA çökmemeli

Başarı Kriterleri

15 saat
Kesintisiz çalışma
<50 MB
RAM kullanımı
0 crash
Günlük çökme

2. Neden Flutter?

Basit Anlatım

Flutter, Google'ın geliştirdiği bir framework. Tek kod yazarak hem iPhone hem Android için uygulama çıkarabiliyoruz. React Native'e göre daha hızlı çalışıyor çünkü kod doğrudan makine diline derleniyor (JavaScript köprüsü yok).

Detaylı Karşılaştırma

Kriter React Native Flutter Neden Önemli?
Audio Kütüphaneleri react-native-track-player just_audio + audio_service ✓ Flutter'ın audio sistemi daha olgun ve HLS desteği native
Gapless Playback Sınırlı ⚠ Native destek ✓ Şarkılar arası boşluk kullanıcıyı rahatsız eder
Background Playback Extra setup gerekli audio_service isolate ✓ Uygulama arka planda müzik çalmalı
Performans JS Bridge overhead Native ARM compile ✓ 15 saat çalışacak, her ms önemli
Memory Management GC tahmin edilemez ⚠ Dart VM optimize ✓ Memory leak = 15 saatte çökme
UI Tutarlılığı Platform-specific Pixel-perfect ✓ Marka tutarlılığı için önemli
Hot Reload Fast Refresh Stateful Hot Reload ✓ Geliştirme hızı
Build Size ~20 MB ~12 MB ✓ Eski cihazlarda depolama sınırlı
Öğrenme Eğrisi JS/React biliyorsan kolay ✓ Dart öğrenmek gerek Dart öğrenmesi kolay, 1-2 hafta
3/10
React Native

Audio için yetersiz, memory sorunları olabilir

9/10
Flutter

Audio mükemmel, performans yüksek, memory stabil

3. Kesintisiz Müzik Sistemi

Basit Anlatım

Müziğin donmaması için 3 temel strateji uyguluyoruz: (1) İnternet hızına göre otomatik kalite ayarı (HLS), (2) Şarkı bitmeden sonrakini arka planda yükleme (preload), (3) İnternet kesilirse bile çalmaya devam (buffer).

HLS Adaptive Streaming (Akıllı Kalite)

HLS (HTTP Live Streaming), internet hızına göre otomatik kalite ayarı yapar. Bağlantı yavaşlarsa kaliteyi düşürür ama asla durmaz.

Hızlı internet
320 kbps (Orijinal)
Normal internet
128 kbps
Yavaş internet
64 kbps
Çok yavaş
32 kbps

Fallback Zinciri (Yedek Planlar)

HLS başarısız olursa sırayla yedek planlara geçer. Hiçbir durumda sessiz kalmaz.

1
HLS Adaptive Otomatik kalite ayarlı streaming
2
HLS Sabit 128k Adaptive başarısızsa sabit kalite
3
MP3 128k HLS tamamen başarısızsa MP3'e geç
4
MP3 64k Düşük kaliteli yedek
5
Sonraki Şarkıya Geç Bu şarkı çalınamıyorsa atla

Teknik Uygulama (Flutter)

// Flutter'da kesintisiz müzik için kullanılacak paketler

just_audio: ^0.9.36
  → HLS/MP3 playback, gapless queue, preload

audio_service: ^0.18.12
  → Background playback (uygulama kapalıyken)
  → Lock screen controls (kilit ekranında kontrol)
  → Notification player (bildirim çubuğunda mini player)

audio_session: ^0.1.18
  → Audio focus yönetimi (telefon gelince duraklat)
  → Ses kesintisi handling (başka uygulama ses çalınca)

// Gapless queue örneği
final playlist = ConcatenatingAudioSource(
  children: [
    AudioSource.uri(Uri.parse('song1.m3u8')),
    AudioSource.uri(Uri.parse('song2.m3u8')),
    AudioSource.uri(Uri.parse('song3.m3u8')),
  ],
);
await player.setAudioSource(playlist);
// Şarkılar arası boşluk YOK - otomatik preload

Gapless Playback

Şarkılar arası boşluk yok. Sonraki şarkı önceden yüklenir.

Aggressive Buffer

30 saniyelik buffer. İnternet 30 sn kesilse bile çalmaya devam.

Auto Recovery

Bağlantı gelince otomatik devam. Manuel müdahale gerekmez.

4. Social Login Sistemi

Basit Anlatım

Kullanıcılar e-posta/şifre yerine mevcut Google, Facebook veya Apple hesaplarıyla tek tıkla giriş yapabilecek. Bu hem kullanıcı için kolay, hem de şifre unutma sorunlarını ortadan kaldırır.

Google

google_sign_in

  • Android'de native
  • iOS'ta da çalışır
  • Firebase ile entegre

Facebook

flutter_facebook_auth

  • Geniş kullanıcı kitlesi
  • Graph API erişimi
  • Profil fotoğrafı

Apple

sign_in_with_apple

  • iOS'ta zorunlu
  • Gizlilik odaklı
  • Email hide özelliği

Flutter Paketleri

# pubspec.yaml - Social Login Paketleri
dependencies:
  google_sign_in: ^6.2.1         # Google OAuth
  flutter_facebook_auth: ^6.1.1  # Facebook Login
  sign_in_with_apple: ^5.0.0     # Apple Sign In
  firebase_auth: ^4.16.0         # Firebase Auth (opsiyonel)

# Backend'e gönderilecek token flow:
1. Kullanıcı "Google ile Giriş" butonuna tıklar
2. Google OAuth ekranı açılır
3. Kullanıcı izin verir
4. Google'dan id_token alınır
5. Token backend'e gönderilir: POST /api/auth/social
6. Backend token'ı doğrular, kullanıcı oluşturur/günceller
7. JWT token döner, uygulama giriş yapar

Backend API Gereksinimi

Mevcut Laravel backend'e yeni endpoint eklenmeli:

POST /api/auth/social
{
  "provider": "google|facebook|apple",
  "id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6..."
}

5. Ödeme Sistemi (In-App Purchase)

Basit Anlatım

Kullanıcılar uygulama içinden abonelik satın alabilecek. Apple kullanıcıları App Store üzerinden, Android kullanıcıları Google Play üzerinden ödeme yapacak. Her iki platform da %15-30 komisyon alıyor.

Google Play Billing

Android için

Komisyon %15 (ilk $1M) / %30
Abonelik türleri Aylık, Yıllık, Haftalık
Test modu Sandbox environment
Flutter paketi in_app_purchase

App Store Connect

iOS için

Komisyon %15 (küçük işletme) / %30
Abonelik türleri Aylık, Yıllık, Haftalık
Test modu StoreKit Testing
Flutter paketi in_app_purchase

Abonelik Planları

Aylık
₺XX
Her ay otomatik yenilenir
En Popüler
Yıllık
₺XX
2 ay bedava!
Kurumsal
₺XX
Özel fiyatlandırma

Teknik Uygulama

# pubspec.yaml - Ödeme Paketleri
dependencies:
  in_app_purchase: ^3.1.13       # Official Flutter IAP
  purchases_flutter: ^6.17.0     # RevenueCat SDK (opsiyonel)

# RevenueCat neden öneriliyor?
→ Tek API ile hem iOS hem Android yönetimi
→ Otomatik receipt validation
→ Subscription analytics dashboard
→ Webhook entegrasyonu (backend'e bildirim)
→ Churn prevention tools

# Purchase flow:
1. Kullanıcı plan seçer
2. Store native payment sheet açılır
3. Kullanıcı parmak izi/Face ID ile onaylar
4. Purchase receipt alınır
5. Receipt backend'e gönderilir
6. Backend store API ile doğrular
7. Kullanıcı premium olur

Backend Webhook Gereksinimleri

Google Play

  • • Real-time Developer Notifications
  • • Pub/Sub webhook endpoint
  • • Receipt verification API

App Store

  • • Server-to-Server Notifications V2
  • • verifyReceipt endpoint
  • • JWS token validation

6. API Entegrasyon

Mevcut Durum

Muzibu'nun REST API'si hazır ve çalışıyor. Mobil uygulama bu API'yi kullanacak. Sanctum token sistemi ile güvenli iletişim. Rate limiting ile korunuyor.

Authentication
POST /api/auth/login E-posta/şifre ile giriş
POST /api/auth/social Social login (Google/FB/Apple)
GET /api/auth/me Kullanıcı bilgisi + premium durumu
POST /api/auth/logout Çıkış yap
Streaming
GET /api/muzibu/songs/{id}/stream HLS/MP3 stream URL al
POST /api/muzibu/songs/{id}/track-start Çalma başladı (analytics)
POST /api/muzibu/songs/{id}/track-hit 30sn dinlendi (play count)
POST /api/muzibu/songs/{id}/track-end Çalma bitti
Queue & Content
GET /api/muzibu/queue/initial Başlangıç şarkı listesi
POST /api/muzibu/queue/refill Daha fazla şarkı yükle
GET /api/muzibu/playlists Playlist listesi
GET /api/muzibu/genres Tür listesi
GET /api/muzibu/sectors Sektör listesi

7. Uygulama Mimarisi

┌────────────────────────────────────────────────────────────────┐
│                         FLUTTER APP                            │
├────────────────────────────────────────────────────────────────┤
│                                                                │
│   ┌──────────────────────────────────────────────────────┐    │
│   │                    UI LAYER                           │    │
│   │  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐        │    │
│   │  │ Login  │ │  Home  │ │ Player │ │Library │        │    │
│   │  └────────┘ └────────┘ └────────┘ └────────┘        │    │
│   └──────────────────────────┬───────────────────────────┘    │
│                              │                                 │
│   ┌──────────────────────────▼───────────────────────────┐    │
│   │              STATE MANAGEMENT (Riverpod)              │    │
│   │  ┌──────────┐ ┌──────────┐ ┌──────────┐             │    │
│   │  │AuthState │ │PlayerState│ │ContentState│            │    │
│   │  └──────────┘ └──────────┘ └──────────┘             │    │
│   └──────────────────────────┬───────────────────────────┘    │
│                              │                                 │
│   ┌──────────────────────────▼───────────────────────────┐    │
│   │                   SERVICE LAYER                       │    │
│   │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │    │
│   │  │  Auth    │ │  Music   │ │ Payment  │ │Analytics│ │    │
│   │  │ Service  │ │ Service  │ │ Service  │ │ Service │ │    │
│   │  └──────────┘ └──────────┘ └──────────┘ └─────────┘ │    │
│   └──────────────────────────┬───────────────────────────┘    │
│                              │                                 │
│   ┌──────────────────────────▼───────────────────────────┐    │
│   │                 REPOSITORY LAYER                      │    │
│   │  ┌──────────┐ ┌──────────┐ ┌──────────┐             │    │
│   │  │ Remote   │ │  Local   │ │  Cache   │             │    │
│   │  │  (API)   │ │  (Hive)  │ │ Manager  │             │    │
│   │  └──────────┘ └──────────┘ └──────────┘             │    │
│   └───────────────────────────────────────────────────────┘    │
│                                                                │
├────────────────────────────────────────────────────────────────┤
│                  AUDIO SERVICE (Background Isolate)            │
│   ┌────────────────────────────────────────────────────────┐  │
│   │  just_audio + audio_service + audio_session            │  │
│   │  • HLS Adaptive Streaming                              │  │
│   │  • Gapless Queue                                       │  │
│   │  • Lock Screen Controls                                │  │
│   │  • Background Playback                                 │  │
│   └────────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌────────────────────────────────────────────────────────────────┐
│                      MUZIBU REST API                           │
│  Laravel + Sanctum + Multi-tenant                              │
└────────────────────────────────────────────────────────────────┘
lib/
├── main.dart                    # Entry point
├── app/
│   ├── app.dart                 # MaterialApp
│   ├── routes.dart              # GoRouter navigation
│   └── theme.dart               # Muzibu tema
├── core/
│   ├── api/
│   │   ├── dio_client.dart      # HTTP client
│   │   └── interceptors/        # Auth, error handling
│   ├── constants/               # API URLs, keys
│   └── utils/                   # Helpers
├── features/
│   ├── auth/                    # Login, Social Login
│   ├── home/                    # Ana sayfa
│   ├── player/                  # Audio player
│   ├── playlists/               # Playlist yönetimi
│   ├── search/                  # Arama
│   ├── library/                 # Kütüphane
│   ├── subscription/            # Abonelik & IAP
│   └── settings/                # Ayarlar
├── services/
│   ├── audio_handler.dart       # Background audio
│   ├── auth_service.dart        # Authentication
│   ├── payment_service.dart     # In-App Purchase
│   └── analytics_service.dart   # Play tracking
├── models/                      # Data models
├── providers/                   # Riverpod providers
└── widgets/                     # Reusable components

8. Tasarım Sistemi

Renk Paleti

Primary
#f97316 → #dc2626
Background
#121212
Surface
#1e1e1e
Text
#ffffff

Ekranlar

Login
Social + Email
Home
Genres, Playlists
Search
Full-text search
Library
Favoriler, Recents
Now Playing
Full-screen player
Queue
Çalma sırası
Subscription
Abonelik planları
Settings
Hesap, kalite, tema

9. Geliştirme Yol Haritası

Geliştirme Stratejisi

Geliştirme 6 fazda ilerleyecek. Her faz sonunda çalışan bir ürün olacak (MVP yaklaşımı). İlk 3 faz sonunda temel uygulama hazır olacak, sonraki fazlar ek özellikler ekleyecek.

1

Faz 1: Temel Altyapı

Kritik

Flutter projesi kurulur, tasarım sistemi oluşturulur, API bağlantısı yapılır. Bu faz tamamlandığında giriş yapılabilir ve boş bir ana sayfa görülebilir.

Flutter proje kurulumu
Tema sistemi (Dark mode)
Dio HTTP client + interceptors
E-posta/şifre login
Token storage (secure)
Basic navigation (GoRouter)
2

Faz 2: Audio Player (Kalp)

En Kritik

Uygulamanın kalbi olan audio player geliştirilir. HLS streaming, background playback, gapless queue ve lock screen kontrolleri bu fazda tamamlanır. Bu faz en önemli fazdır.

just_audio entegrasyonu
audio_service (background)
HLS adaptive streaming
MP3 fallback zinciri
Gapless queue
Lock screen controls
Play tracking (analytics)
Now Playing UI
3

Faz 3: İçerik & Keşif

MVP Tamamlama

Ana sayfa, arama, playlist yönetimi ve kütüphane ekranları tamamlanır. Bu faz sonunda MVP (Minimum Viable Product) hazır olur.

Home screen (türler, playlistler)
Search (full-text)
Playlist detay sayfası
Favoriler
Son çalınanlar
Queue yönetimi UI
4

Faz 4: Social Login & Payments

Monetization

Google/Facebook/Apple ile giriş ve uygulama içi satın alma eklenir. Bu faz sonunda gelir elde edilebilir.

Google Sign-In
Facebook Login
Apple Sign In
Google Play Billing
App Store IAP
Subscription yönetimi
5

Faz 5: Kurumsal & İleri Özellikler

B2B Features

Kurumsal müşteriler için özel özellikler: spot/anons sistemi, sektör seçimi, offline cache ve push notifications.

Corporate spot entegrasyonu
Sektör/Radyo seçimi
Offline cache (opsiyonel)
Push notifications
Widget desteği
CarPlay / Android Auto
6

Faz 6: Test & Release

Production

Kapsamlı testler, performans optimizasyonu, 15 saatlik oturum testleri ve store yayın hazırlığı.

15 saat oturum testi
Memory leak analizi
Eski cihaz testleri (iOS 12, Android 6)
Performans optimizasyonu
App Store / Play Store hazırlık
Beta testing & Production release

10. Teknik Detaylar

# pubspec.yaml - Tüm Paketler

# Core
flutter: SDK
cupertino_icons: ^1.0.6

# State Management
flutter_riverpod: ^2.4.9        # State management
riverpod_annotation: ^2.3.3     # Code generation

# Audio
just_audio: ^0.9.36              # Audio playback (HLS, gapless)
audio_service: ^0.18.12          # Background playback
audio_session: ^0.1.18           # Audio focus

# Network
dio: ^5.4.0                       # HTTP client
connectivity_plus: ^5.0.2        # Network status

# Storage
flutter_secure_storage: ^9.0.0   # Secure token storage
hive: ^2.2.3                      # Local database
hive_flutter: ^1.1.0             # Hive Flutter bindings

# Auth
google_sign_in: ^6.2.1           # Google OAuth
flutter_facebook_auth: ^6.1.1    # Facebook Login
sign_in_with_apple: ^5.0.0       # Apple Sign In

# Payments
in_app_purchase: ^3.1.13         # In-App Purchase
purchases_flutter: ^6.17.0       # RevenueCat (opsiyonel)

# UI
cached_network_image: ^3.3.1     # Image caching
shimmer: ^3.0.0                   # Loading skeleton
go_router: ^13.0.0                # Navigation

# Notifications
firebase_messaging: ^14.7.10     # Push notifications
flutter_local_notifications:    # Local notifications

11. Riskler & Çözümler

Risk: Memory Leak (15 saat çalışma)

Uzun oturumlarda bellek sızıntısı uygulama çökmesine yol açabilir.

Çözüm: Dart DevTools ile profiling, WeakReference kullanımı, periyodik GC tetikleme, 15 saat stress testleri.

Risk: Zayıf İnternet Bağlantısı

Kötü internet müziğin durmasına neden olabilir.

Çözüm: HLS adaptive streaming, 30sn buffer, fallback chain, offline cache.

Risk: Eski Cihaz Uyumsuzluğu

5-7 yıllık cihazlarda performans sorunları yaşanabilir.

Çözüm: Minimum SDK iOS 12 / Android 6, düşük RAM optimizasyonu, hafif UI animasyonları.

Risk: Store Komisyonları

Apple/Google %15-30 komisyon alıyor.

Çözüm: Yıllık abonelik teşviki, web üzerinden alternatif ödeme (kurumsal), Small Business Program başvurusu.

Sonuç

Muzibu mobil uygulaması, Flutter ile geliştirilecek. Kesintisiz müzik için HLS adaptive streaming, gapless playback ve aggressive buffer kullanılacak. Google/Facebook/Apple login ve In-App Purchase ile tam ticari ürün oluşturulacak.

Flutter 3.x
Google Login
Apple Login
In-App Purchase