Background Fetch: nedir, çalışma prensibi ve güncelleme yapılandırması

Yazar: IT Sectr Yayınlanma: 2026-03-27 Okuma süresi: 8 dk

Background Fetch, yeni içerik indirmek için arka planda periyodik olarak uygulamayı uyandıran bir iOS mekanizmasıdır. Sistem, kullanıcı davranışını analiz eder ve güncelleme için en uygun zaman aralıklarını seçer. Apple, 2026'ya göre, uygulama işlemi gerçekleştirmek için 30 ila 120 saniye alır, ardından sistem süreci askıya alır veya sonlandırır.

Önemli Noktalar

  • Background Fetch, arka planda periyodik içerik güncellemesi için bir iOS API'sidir.
  • Sistem kontrol eder kullanıcı davranışı analizine dayalı olarak uyandırma sıklığını.
  • Minimum aralık UIApplication.minimumBackgroundFetchInterval aracılığıyla ayarlanır.
  • Eskime — iOS 13+'ten itibaren mekanizma eski kabul edilir, BGTaskScheduler önerilir.
  • Yürütme süresi — 30 saniyeye kadar, ardından sistem görevi zorla sonlandırır.

iOS'ta Background Fetch Nedir?

Background Fetch, uygulamanın arka planda periyodik olarak yeni veri almasını sağlayan bir iOS API'sidir. İlk olarak iOS 7'de Background App Refresh mekanizmasıyla birlikte tanıtılmıştır. Ana hedef, kullanıcı uygulamayı açtığında içeriğin güncel olması ve yükleme beklenmesine gerek kalmamasıdır.

Push Bildirimlerinden Farkı

Push bildirimleri sunucu tarafından başlatılır — sunucu cihaza sinyal gönderir ve sistem uygulamayı uyandırıp uyandırmayacağına karar verir. Background Fetch, cihaz kullanım modellerine dayanarak iOS'un kendisi tarafından başlatılır. Push acil mesajlar için daha uygundur, Fetch ise planlı içerik güncellemeleri (haberler, sosyal medya akışı) içindir.

Arka Plan Görev Ekosistemindeki Yeri

Background Fetch, iOS'ta birkaç arka plan yürütme mekanizmasından biridir. BGAppRefreshTask (iOS 13+) aynı görevi ancak daha esnek planlamayla gerçekleştirir. Background Modes (ses, konum) sürekli işlemler içindir. Silent Push, sunucu tarafından başlatılan güncellemelerdir. Fetch, iOS 12 ve altını destekleyen projeler için geçerliliğini korur.

  • Background Fetch — periyodik, sistem tarafından başlatılan, iOS 7+.
  • BGAppRefreshTask — periyodik, sistem tarafından başlatılan, iOS 13+.
  • BGProcessingTask — uzun süreli görevler, iOS 13+.
  • Silent Push — sunucu tarafından başlatılan, iOS 7+.

Background Fetch Nasıl Çalışır: Mimari ve Yaşam Döngüsü

iOS, uygulamayı uyandırmak için en uygun zamanı belirlemek üzere makine öğrenimi algoritması kullanır. Sistem, kullanıcının genellikle uygulamayı ne zaman açtığını, ne kadar süre kullandığını ve ne sıklıkla geri döndüğünü analiz eder. Bu verilere dayanarak iOS, Background Fetch için zaman aralıklarını hesaplar.

Görev Yürütme Süreci

Sistem uygulamayı uyandırmaya karar verdiğinde, AppDelegate'te application(_:performFetchWithCompletionHandler:) metodunu çağırır. Uygulama minimum miktarda yeni veri yüklemeli ve üç durumdan biriyle tamamlama işleyicisini çağırmalıdır: .newData (veri yüklendi), .noData (yeni veri yok) veya .failed (hata). Durum, gelecekteki uyandırma sıklığını etkiler.

Tamamlama İşleyicisinin Çağrı Sıklığına Etkisi

.newData durumu, sisteme güncellemenin faydalı olduğunu bildirir — iOS uyandırma sıklığını artırabilir. .noData, veri olmadığını belirtir — sıklık aynı kalır veya azalır. .failed bir sorun olduğunu gösterir — sistem pil tasarrufu için sıklığı azaltır. Vurgu, .newData'yı zorlamak değil, dürüst bir durum üzerinde olmalıdır.

DurumAnlamıEtkisi
.newDataVeriler başarıyla yüklendiSıklık artabilir
.noDataKontrol yeni veri vermediSıklık aynı kalır
.failedAğ veya sunucu hatasıSıklık azalır

Xcode Projesinde Background Fetch Ayarlama

Background Fetch'i etkinleştirmek için iki adım gereklidir: Xcode'da yeteneği etkinleştirin ve kodda minimum aralığı ayarlayın. Yetenek, Target — Signing & Capabilities — Background Modes — Background Fetch kutusunu işaretlemekte bulunur. Bu adım olmadan, sistem uygulamayı uyandırmaz.

Minimum Aralığı Ayarlama

UIApplication.shared.setMinimumBackgroundFetchInterval metodu, Fetch çağrıları arasındaki minimum süreyi saniye cinsinden ayarlar. UIApplication.backgroundFetchIntervalMinimum değeri (yaklaşık 15 dakika), sisteme uygulamayı enerji verimli olduğu kadar sık uyandırmasını söyler. Aralığı application(_:didFinishLaunchingWithOptions:) içinde ayarlamak standart uygulamadır.

swift
func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey : Any]?
)-> Bool {
    UIApplication.shared.setMinimumBackgroundFetchInterval(
        UIApplication.backgroundFetchIntervalMinimum
    )
    return true
}

Info.plist ve Yetenek

Xcode'da Background Fetch etkinleştirildiğinde, Info.plist otomatik olarak güncellenir — UIBackgroundModes anahtarına fetch değeri eklenir. Bu zorunlu bir adımdır: bu olmadan uygulama performFetchWithCompletionHandler çağrısını almaz. P list Source veya Build Settings aracılığıyla doğrulayabilirsiniz.

Swift'te Background Fetch Kod Örnekleri

Bir haber uygulaması için tam bir Background Fetch uygulamasına bakalım. Uygulama, veri yükleme, önbelleğe alma ve tamamlama işleyicisi çağrısını içerir. Kod, AppDelegate'te çalışır — sistemin fetch'i çağırdığı tek yer.

swift
func application(
    _ application: UIApplication,
    performFetchWithCompletionHandler handler: @escaping (UIBackgroundFetchResult) -> Void
) {
    let url = URL(string: "https://api.example.com/latest")!

    URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data, error == nil else {
            handler(.failed)
            return
        }

        do {
            let articles = try JSONDecoder().decode([Article].self, from: data)
            cacheArticles(articles)
            handler(articles.isEmpty ? .noData : .newData)
        } catch {
            handler(.failed)
        }
    }.resume()
}

Yüklenen Verileri Önbelleğe Alma

Background Fetch aracılığıyla veri yüklendikten sonra, yerel depolamaya — CoreData, UserDefaults veya File Manager'a kaydedilmesi gerekir. Uygulama açıldığında veriler zaten kullanılabilir olmalıdır. İş parçacığı güvenli yazma için arka plan bağlamıyla CoreData kullanın. Kaydettikten sonra, ana iş parçacığında kullanıcı arayüzünü güncelleyin.

swift
func cacheArticles(_ articles: [Article]) {
    let container = NSPersistentContainer(name: "AppModel")
    container.performBackgroundTask { context in
        articles.forEach { article in
            let entity = ArticleEntity(context: context)
            entity.id = Int64(article.id)
            entity.title = article.title
            entity.body = article.body
        }
        try? context.save()
    }
}

Background Fetch'i Test Etme

Test için Simülatör'ü kullanın — Xcode'da Debug — Simulate Background Fetch'i seçin. Fiziksel bir cihazda, sistemin fetch yapmaya karar vermesini beklemeniz gerekir. Hızlandırmak için minimum aralığı 1 dakikaya ayarlayabilirsiniz, ancak pil zayıf olduğunda sistem bunu yok sayabilir.

Sınırlamalar ve Tuzaklar

Background Fetch'in, uygulama mimarisini tasarlarken dikkate alınması gereken birkaç sınırlaması vardır. En önemlisi, sistem çağrı sıklığını tamamen kontrol eder ve geliştirici bunu garanti edemez. Minimum aralık ayarlanmış olsa bile, sistem saatlerce fetch'i çağırmayabilir.

Yürütme Süresi Sınırı

Sistem, görevi yürütmesi için uygulamaya sınırlı süre tahsis eder — genellikle 30 saniyeye kadar. Uygulama bu süre içinde tamamlama işleyicisini çağırmazsa, sistem süreci zorla sonlandırır ve gelecekteki uyandırma sıklığını azaltır. Tüm ağ istekleri kompakt olmalıdır — çağrı başına 1-2'den fazla olmamalıdır.

Pil Bağımlılığı

iOS, Background Fetch'i planlarken pil seviyesini dikkate alır. Şarj %20'nin altında olduğunda, uyandırma sıklığı azalır. Düşük Güç Modu etkinleştirildiğinde, sistem tüm uygulamalar için arka plan güncellemelerini tamamen devre dışı bırakabilir. Kullanıcı, ayarlardan belirli bir uygulama için Background App Refresh'i de devre dışı bırakabilir.

Ağ Sınırlamaları

Background Fetch'ten başlatılan URLSession, standart modda çalışır — arka plan oturum desteği olmadan. Büyük indirmeler için arka plan yapılandırmasıyla URLSession kullanın. Sistem, fetch tamamlandıktan sonra bile indirmeye devam eder, ancak bir sonraki uyandırmaya kadar ilerleme izlenmez.

Background Fetch'ten BGTaskScheduler'a Geçiş

iOS 13'ten itibaren Apple, BGTaskScheduler'ı Background Fetch'in yerine önermektedir. BGTaskScheduler daha esnek planlama, iki görev türü (yenileme ve işleme) ve tanımlayıcılarla görev kaydı sağlar. Geçiş birkaç adım içerir ve tüm yeni projeler için önerilir.

Adım Adım Geçiş

İlk adım — BGTaskSchedulerPermittedIdentifiers anahtarı aracılığıyla Info.plist'te görev tanımlayıcılarını tanımlamak. İkinci — BGTaskScheduler.shared.register aracılığıyla AppDelegate'te görevleri kaydetmek. Üçüncü — performFetchWithCompletionHandler çağrısını register'a iletilen işleyiciyle değiştirmek. Dördüncü — görevi planlamak için submit'i çağırmak.

swift
// Önce (Background Fetch)
UIApplication.shared.setMinimumBackgroundFetchInterval(
    UIApplication.backgroundFetchIntervalMinimum
)

// Geçişten sonra (BGTaskScheduler)
BGTaskScheduler.shared.register(
    forTaskWithIdentifier: "com.example.refresh",
    using: nil
) { task in
    self.handleAppRefresh(task: task as! BGAppRefreshTask)
}

let request = BGAppRefreshTaskRequest(
    identifier: "com.example.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)

BGTaskScheduler'ın Avantajları

BGTaskScheduler daha fazla kontrol sağlar: uzun işlemler için BGProcessingTask (10 dakikaya kadar), requiresNetworkConnectivity ve requiresExternalPower aracılığıyla yürütme koşulları ve kontrollü sonlandırma için bir süre sonu işleyicisi. Sistem ayrıca uygulama kullanımını analiz eder, ancak geliştirici daha kesin gereksinimler belirleyebilir.

Background Fetch Ne Zaman Korunmalı

Uygulama iOS 12 ve altını destekliyorsa, Background Fetch periyodik güncellemeler için tek seçenek olarak kalır. BGTaskScheduler yalnızca iOS 13+'ten itibaren kullanılabilir. Bu durumda, bir sarmalayıcı kullanın: if #available(iOS 13, *) aracılığıyla kullanılabilirliği kontrol edin ve uygun API'yi çağırın.

Sıkça Sorulan Sorular

iOS, Background Fetch'i ne sıklıkla çağırır?

Kesin sıklık belgelenmemiştir ve kullanıcı davranışına bağlıdır. Sistem, kullanıcının uygulamayı ne sıklıkta açtığını analiz eder ve sıklığı buna göre ayarlar. Ortalama olarak, aktif kullanımda fetch saatte 1–3 kez çağrılabilir. Seyrek kullanımda — günde 1–2 kez.

Background Fetch'im neden çağrılmıyor?

Üç koşulu kontrol edin: Background Fetch yeteneği Xcode'da etkinleştirilmiş, minimumBackgroundFetchInterval ayarlanmış ve kullanıcı ayarlardan uygulama için Background App Refresh'i devre dışı bırakmamış. Ayrıca cihazın Düşük Güç Modu'nda olmadığını ve pil seviyesinin %20'nin üzerinde olduğunu kontrol edin.

Background Fetch ve BGAppRefreshTask arasındaki fark nedir?

Background Fetch eski API'dir (iOS 7), BGAppRefreshTask ise yeni API'dir (iOS 13+). BGAppRefreshTask daha fazla kontrol sağlar: süre sonu işleyicisi, yeniden planlama yeteneği ve durum kontrolü. Background Fetch uygulaması daha basittir ancak daha az esnektir. Apple yeni projeler için BGAppRefreshTask kullanılmasını önerir.

Background Fetch aracılığıyla büyük dosyalar indirilebilir mi?

Önerilmez. Background Fetch zaman sınırlıdır (30 saniyeye kadar). Büyük indirmeler için arka plan yapılandırmasıyla URLSession kullanın — sistem fetch tamamlandıktan sonra bile indirmeye devam eder. Alternatif, 10 dakikaya kadar ve şarj koşullarına izin veren BGProcessingTask'tir (iOS 13+).

Background Fetch pil tüketir mi?

Evet, her uyandırma işlemciyi açmak, ağ yığınını başlatmak ve veri yüklemek için enerji tüketir. iOS, etkiyi en aza indirmek için sıklığı optimize eder. Doğru uygulamayla — yalnızca yeni veri yükleme, hızlı tamamlama işleyicisi çağrısı — pil etkisi minimumdur.

Özet

  • Background Fetch, iOS 7'den beri kullanılabilen, periyodik arka plan veri yüklemesi için bir iOS API'sidir ve BGTaskScheduler ile değiştirilmesi önerilir.
  • Sistem, kullanıcı davranışını analiz ederek çağrı sıklığını kontrol eder — geliştirici uyandırma zamanını garanti edemez.
  • Üç tamamlama işleyicisi durumu — .newData, .noData, .failed — gelecekteki uygulama uyandırma sıklığını etkiler.
  • 30 saniye sınırı — uzun işlemler veya birden çok sıralı ağ isteği çalıştırmayın.
  • Yetenek zorunludur — Xcode'da Background Fetch + kodda minimumBackgroundFetchInterval ayarlama.
  • BGTaskScheduler, iOS 13+'ten itibaren daha modern alternatiftir, daha fazla kontrol ve iki görev türü sağlar.
  • iOS 12 ve altını destekleyen projeler için, if #available aracılığıyla BGTaskScheduler kullanılabilirliği kontrolüyle Background Fetch kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun