TV App: Apple TV və Android TV üçün tətbiq hazırlanmasının əsasları

Müəllif: IT Sectr Dərc olunub: 2026-02-15 Oxuma vaxtı: 10 dəq

TV App — Apple TV (tvOS) və Android TV (Google TV) platformalarında işləyən smart-televizorlar üçün tətbiqdir. Mobil tətbiqlərdən fərqli olaraq, TV App pultla naviqasiya, fokus-idarəetmə (Focus Engine) və böyük ekranda interfeysin spesifik tələbləri nəzərə alınmaqla hazırlanır. İnkişaf Apple TV üçün Swift/SwiftUI və Android TV üçün Kotlin ilə Leanback Library istifadə edilərək aparılır. Statista (2026) məlumatlarına görə, dünyada 250 milyondan çox cihaz bu platformalarda işləyir ki, bu da TV App-i proqramçılar üçün perspektivli bir niş halına gətirir. Platformaların arxitekturasını, fokus-idarəetməni, kod nümunələrini və nəşr prosesini nəzərdən keçirək.

Əsas məqamlar

  • TV App — ağıllı televizorlar üçün pultla idarəetmə və böyük ekran üçün optimallaşdırılmış tətbiq
  • Apple TV (tvOS) — Apple platforması Focus Engine, SwiftUI və UIKit ilə, nəşr App Store vasitəsilə
  • Android TV — Google platforması Leanback kitabxanası, Kotlin və Compose ilə, nəşr Google Play vasitəsilə
  • Focus Engine — tvOS-da UIFocusEnvironment vasitəsilə işləyən əsas fokus idarəetmə mexanizmi
  • Leanback Library — Android TV üçün əsas komponent dəsti (BrowseFragment, DetailsFragment)

TV App nədir

TV App — ağıllı televizor platformalarında işləmək üçün nəzərdə tutulmuş tətbiqdir: Apple TV (tvOS) və Android TV (Google TV). Mobil tətbiqdən əsas fərq — qarşılıqlı əlaqə üsulu. İstifadəçi ekrana toxunmur, əksinə pult vasitəsilə interfeysi idarə edir. Bütün elementlər istiqamətli naviqasiya (D-pad) vasitəsilə əlçatan olmalıdır: yuxarı, aşağı, sola, sağa və seçim düyməsi.

TV App hazırlanmasının xüsusiyyətləri: ekran təsviri — Full HD (1920x1080) ilə 4K (3840x2160) arasında xhdpi sıxlığı (Android) və ya @3x (Apple) ilə. Over-scan kompensasiyası üçün kənarlardan 5% təhlükəsiz zona məcburidir (şəklin bir hissəsi televizor tərəfindən kəsilə bilər). Sensor ekran yoxdur — bütün qarşılıqlı əlaqələr pult və ya gamepad vasitəsilədir. Fokus həmişə aktiv elementi vurğulayır. Enerji istehlakı batareya ilə məhdudlaşmır, lakin tətbiq yuxu rejiminə keçidi düzgün idarə etməlidir. Statista (2026) məlumatlarına görə, qlobal smart TV bazarı yeni televizorların 80%-ni keçir, Apple TV və Android TV isə 250 milyondan çox cihazı əhatə edir.

TV tətbiqlərinin kateqoriyaları: video xidmətləri (Netflix, YouTube, Apple TV+), musiqi (Spotify, Apple Music), oyunlar (Apple Arcade, Google Play Games), fitness (Apple Fitness+, Peloton), təhsil, xəbərlər, hava, foto. Ən populyar kateqoriya — video axını, smart TV-dən istifadə müddətinin 70%-ni təşkil edir.

Apple TV (tvOS): arxitektura

tvOS — Apple TV qutusu üçün Apple-ın iOS əsaslı əməliyyat sistemidir. İlk buraxılış — 2015-ci il, Apple TV 4-cü nəsil ilə birlikdə. tvOS iOS ilə XNU nüvəsini, Foundation freymvorklarını, UIKit-i (uyğunlaşdırılmış versiyada) və App Sandbox təhlükəsizlik mexanizmini paylaşır. İnkişaf Swift istifadə edilərək SwiftUI və ya UIKit ilə aparılır.

tvOS-un əsas komponentləri:

  • Focus Engine — interfeysin aktiv elementini avtomatik təyin edən fokus idarəetmə sistemi
  • UIKit tvOS üçün — fokus idarəetməsi üçün UIFocusGuide, UIFocusEnvironment, UIFocusAnimationCoordinator
  • SwiftUI — FocusState və focusable() modifieri ilə deklarativ freymvork
  • TVMLKit — JavaScript/TVML interfeysləri üçün freymvork (müasir layihələrdə nadir hallarda istifadə olunur)
  • StoreKit — tətbiqdaxili alışlar və abunələr
  • AVFoundation — HDR və Dolby Atmos dəstəyi ilə video və audio məzmunun oxudulması

tvOS tətbiqinin həyat dövrü iOS ilə analojidir: notRunning, foregroundActive, foregroundInactive, background. Xüsusiyyət: tətbiq zərurət olmadan fon icazələri tələb etməməlidir — sistem fon prosesini məcburi şəkildə sonlandıra bilər. Naviqasiya topologiyası UISplitViewController və UITabBarController ətrafında qurulur „Ana səhifə“, „Axtarış“, „Kitabxana“, „Parametrlər“ nişanları ilə.

Android TV: arxitektura

Android TV — televizorlar və qutular üçün optimallaşdırılmış Android versiyası, ilk dəfə 2014-cü ildə təqdim edilmişdir. 2020-ci ildən etibarən Google TV mövcuddur — Android TV üzərində yeni interfeysli qat, lakin tətbiq inkişafı Android TV SDK-da aparılır, Google TV ilə uyğunlaşır. Əsas dil — Kotlin, UI freymvorkları — Leanback Library (klassik) və Jetpack Compose for TV (eksperimental).

Android TV-nin əsas komponentləri:

  • Leanback Library — BrowseFragment, DetailsFragment, PlaybackOverlayFragment, SearchFragment, Presenter
  • Android TV Input Framework — klaviaturalar, pultlar və gamepadlar yaratmaq
  • MediaSession — media məzmununun oxudulmasını idarə etmək
  • Recommendations — NotificationManager vasitəsilə əsas ekranda tövsiyə kanalı
  • Leanback Preferences — TV üslubunda parametr ekranları

Android TV-nin mobil Android-dən fərqləri: tətbiq manifestdə LEANBACK_LAUNCHER kateqoriyasını məcburi elan edir; minimal layout eni — 1920dp; toxunma qarşılıqlı əlaqəsi D-pad naviqasiyası ilə əvəz olunur; Leanback fraqmentlərindən istifadə tövsiyə olunur; hardware sürətləndirməsi məcburidir. Quraşdırma ARM64 və x86 arxitekturalarını dəstəkləyən APK/AAB daxildir. 2025-ci ildən müasir layihələr üçün TvLazyColumn, TvButton, TvCard komponentləri ilə Jetpack Compose for TV tövsiyə olunur.

Focus Engine və fokus idarəetməsi

Focus Engine — hər bir TV platformasının əsas komponenti, interfeysin hansı elementinin aktiv olduğuna cavabdehdir. tvOS-da Focus Engine UIKit-ə daxildir və avtomatik işləyir. D-pad düyməsi basıldıqda sistem bütün focusable-elementlərin yerləşməsini təhlil edir, basma istiqamətində ən yaxın namizədi hesablayır və animasiya ilə fokusu ona köçürür (UIFocusAnimationCoordinator).

Focus Engine qaydaları: sistem hərəkət oxu boyunca elementlər arasındakı məsafəni, elementlərin proyeksiyalarının kəsişməsini (element namizəd hesab olunur, əgər onun proyeksiyası cari fokusun proyeksiyasını kəsirsə), eyni məsafədə olan elementlərin prioritetini (düz xətt üzrə ən yaxını seçilir) nəzərə alır. Proqramçı UIFocusGuide vasitəsilə fokusa təsir edə bilər — müəyyən istiqamətdə basıldıqda fokusu konkret elementə yönləndirən görünməz istiqamətləndirici düzbucaqlı.

Android TV-də fokus Android-in standart fokus sistemi vasitəsilə həyata keçirilir focusable və nextFocus* atributları ilə (nextFocusDown, nextFocusUp, nextFocusLeft, nextFocusRight). Animasiya StateListAnimator vasitəsilə konfiqurasiya olunur. Google bütün interaktiv elementlərdə focusable təyin etməyi və naviqasiyanın dəqiq idarəsi üçün nextFocus istifadə etməyi tövsiyə edir. Fokus animasiyası UX üçün kritik əhəmiyyət daşıyır — fokus keçidində 150–250 ms müddətində hamar miqyas animasiyası (1.0 → 1.05–1.2) baş verməlidir.

Kod nümunələri: Swift və Kotlin

Focus Engine dəstəyi ilə film siyahısını göstərən Apple TV üçün SwiftUI-də sadə TV tətbiq nümunəsi.

swift
import SwiftUI

struct Movie: Identifiable {
    let id = UUID()
    let title: String
    let subtitle: String
}

struct ContentView: View {
    @FocusState private var focusedMovie: UUID?

    let movies: [Movie] = [
        Movie(title: "Inception", subtitle: "2010, Sci-Fi"),
        Movie(title: "Interstellar", subtitle: "2014, Sci-Fi"),
        Movie(title: "The Matrix", subtitle: "1999, Action"),
        Movie(title: "Blade Runner 2049", subtitle: "2017, Sci-Fi"),
    ]

    var body: some View {
        VStack(alignment: .leading, spacing: 40) {
            Text("Filmlər").font(.title).padding(.leading, 60)
            ScrollView(.horizontal, showsIndicators: false) {
                HStack(spacing: 40) {
                    ForEach(movies) { movie in
                        VStack {
                            Image(systemName: "film.fill")
                                .resizable()
                                .frame(width: 200, height: 300)
                                .cornerRadius(12)
                                .focusable()
                                .focused($focusedMovie, equals: movie.id)
                            Text(movie.title).font(.headline)
                            Text(movie.subtitle).font(.subheadline).foregroundColor(.secondary)
                        }
                        .scaleEffect(focusedMovie == movie.id ? 1.15 : 1.0)
                        .animation(.easeInOut(duration: 0.2), value: focusedMovie)
                    }
                }
                .padding(.horizontal, 60)
            }
        }
        .onAppear { focusedMovie = movies.first?.id }
    }
}

Əsas məqamlar: @FocusState — cari fokusun izlənməsi; .focusable() — elementi fokus üçün əlçatan edir; .scaleEffect() — fokusda böyütmə animasiyası, TV-də vizual geribildirim üçün vacibdir.

Kotlin-də Leanback Library ilə Android TV üçün analoji nümunə:

kotlin
// MainActivity.kt
class MainActivity : FragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

class MainFragment : BrowseSupportFragment() {
    private val moviePresenter = MoviePresenter()

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        title = getString(R.string.app_name)
        headersState = HEADERS_ENABLED
        setupAdapter()
    }

    private fun setupAdapter() {
        val rowsAdapter = ArrayObjectAdapter(ListRowPresenter())
        val listRowAdapter = ArrayObjectAdapter(moviePresenter)
        listRowAdapter.add(Movie("Inception", "2010", R.drawable.poster_1))
        listRowAdapter.add(Movie("Interstellar", "2014", R.drawable.poster_2))
        rowsAdapter.add(ListRow(HeaderItem(0, "Movies"), listRowAdapter))
        adapter = rowsAdapter
    }
}

data class Movie(val title: String, val subtitle: String, val imageResId: Int)

class MoviePresenter : Presenter() {
    override fun onCreateViewHolder(parent: ViewGroup): ViewHolder {
        val cardView = ImageCardView(parent.context).apply {
            isFocusable = true
            setMainImageDimensions(200, 300)
        }
        return ViewHolder(cardView)
    }

    override fun onBindViewHolder(viewHolder: ViewHolder, item: Any) {
        val movie = item as Movie
        (viewHolder.view as ImageCardView).apply {
            titleText = movie.title
            contentText = movie.subtitle
        }
    }

    override fun onUnbindViewHolder(viewHolder: ViewHolder) {}
}

Əsas məqamlar: BrowseSupportFragment — başlıqlarla Leanback-in əsas fraqmenti; Presenter — RecyclerView.Adapter-ə bənzər ViewHolder yaratmaq üçün abstraksiya; ImageCardView — şəkil, başlıq və altbaşlıqlı standart kart; isFocusable = true — TV elementləri üçün məcburi atribut.

Tez-tez verilən suallar

TV App mobil tətbiqdən nə ilə fərqlənir?

TV App toxunma əvəzinə pult (D-pad) ilə idarə olunur, naviqasiya üçün Focus Engine istifadə edir, böyük ekran (Full HD və ya 4K) üçün optimallaşdırılıb və batareya məhdudiyyəti yoxdur. Bütün elementlər fokusun istiqamətli hərəkəti ilə əlçatan olmalıdır.

tvOS-da Focus Engine nədir?

Focus Engine — tvOS-da interfeysin aktiv elementini avtomatik təyin edən sistemdir. D-pad düyməsi basıldıqda sistem focusable-elementlərin yerləşməsini təhlil edir, ən yaxın namizədi hesablayır və animasiya ilə fokusu ona köçürür.

Android TV üçün hansı freymvorklar istifadə olunur?

Əsas freymvork — Leanback Library (BrowseFragment, DetailsFragment, PlaybackOverlayFragment). Müasir layihələr üçün eksperimental dəstəklə Jetpack Compose for TV da mövcuddur.

TV App hazırlamaq üçün fiziki cihaz lazımdırmı?

İlkin inkişaf üçün simulyatorlar kifayətdir: Xcode Siri Remote ilə tvOS Simulator, Android Studio — Android TV Emulator daxildir. Yekun sınaq üçün fiziki cihaz tövsiyə olunur.

TV App necə nəşr olunur?

Apple TV App App Store Connect vasitəsilə Xcode Organizer ilə nəşr olunur. Android TV App — Google Play Console vasitəsilə manifestdə LEANBACK_LAUNCHER göstərilməklə və 1920x1080 ekran görüntüləri ilə.

Nəticə

  • TV App — D-pad ilə idarə olunan Apple TV (tvOS) və Android TV (Google TV) üçün ixtisaslaşdırılmış tətbiq
  • Focus Engine — tvOS-da naviqasiyanın əsası, UIFocusGuide vasitəsilə konfiqurasiya imkanı ilə avtomatik işləyir
  • SwiftUI Apple TV-də fokus idarəetməsi üçün .focusable() və @FocusState modifierlərini təqdim edir
  • Leanback Library — Presenter, BrowseFragment və ImageCardView ilə Android TV üçün standart komponent dəsti
  • İnkişaf xüsusiyyətləri — 5% təhlükəsiz zona, Full HD/4K təsvir ölçüsü, sensor ekranın olmaması
  • Nəşr — App Store (tvOS) və Google Play (Android TV) ekran görüntüləri və banner tələbləri ilə
  • Sınaq — simulyatorlar ilkin inkişaf üçün uyğundur, fiziki cihaz — yekun QA üçün

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun