Background Fetch: bu nima, ishlash prinsipi va yangilanishlarni sozlash

Muallif: IT Sectr Nashr etilgan: 2026-03-27 O'qish vaqti: 8 daq

Background Fetch — iOS mexanizmi bo'lib, vaqti-vaqti bilan ilovani fonda uyg'otib, yangi kontentni yuklaydi. Tizim foydalanuvchining xatti-harakatlarini tahlil qiladi va yangilanish uchun optimal oynalarni tanlaydi. Apple, 2026 ma'lumotlariga ko'ra, ilova operatsiyani bajarish uchun 30 dan 120 soniyagacha vaqt oladi, shundan so'ng tizim jarayonni to'xtatadi yoki tugatadi.

Asosiy nuqtalar

  • Background Fetch — fonda davriy kontent yangilash uchun iOS API.
  • Tizim boshqaradi uyg'otish chastotasini foydalanuvchi xatti-harakatlarini tahlil qilish asosida.
  • Minimal interval UIApplication.minimumBackgroundFetchInterval orqali o'rnatiladi.
  • Eskirish — iOS 13+ dan mexanizm legacy hisoblanadi, BGTaskScheduler tavsiya etiladi.
  • Ijro vaqti — 30 soniyagacha, shundan so'ng tizim vazifani majburiy tugatadi.

iOS-da Background Fetch nima?

Background Fetch — bu ilovaga fonda vaqti-vaqti bilan yangi ma'lumotlarni olish imkonini beruvchi iOS API. Birinchi marta iOS 7 da Background App Refresh mexanizmi bilan birga taqdim etilgan. Asosiy maqsad — kontent foydalanuvchi ilovani ochgan paytda yangi bo'lishi, yuklashni kutish zaruratisiz.

Push bildirishnomalardan farqi

Push bildirishnomalari server tomonidan boshlanadi — u qurilmaga signal yuboradi va tizim ilovani uyg'otish yoki yo'qligini hal qiladi. Background Fetch iOS ning o'zi tomonidan qurilma foydalanish namunalari asosida boshlanadi. Push shoshilinch xabarlar uchun ko'proq mos keladi, Fetch — rejali kontent yangilash uchun (yangiliklar, ijtimoiy tarmoq lentasi).

Fon vazifalari ekotizimida o'rni

Background Fetch — iOS-da fon ijrosi mexanizmlaridan biri. BGAppRefreshTask (iOS 13+) xuddi shu vazifani bajaradi, lekin moslashuvchan rejalashtirish bilan. Background Modes (audio, joylashuv) — uzluksiz operatsiyalar uchun. Silent Push — server tomonidan boshlangan yangilanish. Fetch iOS 12 va undan pastini qo'llab-quvvatlovchi loyihalar uchun dolzarbligicha qolmoqda.

  • Background Fetch — davriy, tizim tomonidan boshlanadi, iOS 7+.
  • BGAppRefreshTask — davriy, tizim tomonidan boshlanadi, iOS 13+.
  • BGProcessingTask — uzoq muddatli vazifalar, iOS 13+.
  • Silent Push — server tomonidan boshlanadi, iOS 7+.

Background Fetch qanday ishlaydi: arxitektura va hayot sikli

iOS ilovani uyg'otish uchun optimal vaqtni aniqlash maqsadida mashinani o'rganish algoritmidan foydalanadi. Tizim foydalanuvchi odatda ilovani qachon ochishini, undan qancha vaqt foydalanishini va qanchalik tez-tez qaytishini tahlil qiladi. Ushbu ma'lumotlar asosida iOS Background Fetch uchun oynalarni hisoblaydi.

Vazifani bajarish jarayoni

Tizim ilovani uyg'otishga qaror qilganda, AppDelegate-da application(_:performFetchWithCompletionHandler:) metodini chaqiradi. Ilova minimal miqdordagi yangi ma'lumotlarni yuklab, uchta statusdan biri bilan completion handler chaqirishi kerak: .newData (ma'lumot yuklandi), .noData (yangi ma'lumot yo'q) yoki .failed (xato). Status kelajakdagi uyg'otishlar chastotasiga ta'sir qiladi.

Completion handler ning chaqiruv chastotasiga ta'siri

.newData statusi tizimga yangilanish foydali bo'lganligini bildiradi — iOS uyg'otish chastotasini oshirishi mumkin. .noData ma'lumot yo'qligini aytadi — chastota o'zgarishsiz qoladi yoki kamayadi. .failed muammo borligini ko'rsatadi — tizim batareyani sarflamaslik uchun chastotani kamaytiradi. Asosiy e'tibor halol statusga qaratilishi kerak, majburiy .newData ga emas.

StatusMa'nosiTa'siri
.newDataMa'lumot muvaffaqiyatli yuklandiChastota oshishi mumkin
.noDataTekshiruv yangi ma'lumot bermadiChastota o'zgarishsiz qoladi
.failedTarmoq yoki server xatosiChastota kamayadi

Xcode loyihasida Background Fetch sozlamalari

Background Fetch ni yoqish uchun ikki qadamni bajarish kerak: Xcode-da capability ni faollashtirish va kodda minimal intervalni o'rnatish. Capability Target — Signing & Capabilities — Background Modes — Background Fetch katagiga belgi qo'yish orqali topiladi. Bu qadamsiz tizim ilovani uyg'otmaydi.

Minimal intervalni o'rnatish

UIApplication.shared.setMinimumBackgroundFetchInterval metodi Fetch chaqiruvlari orasidagi minimal vaqtni soniyalarda o'rnatadi. UIApplication.backgroundFetchIntervalMinimum qiymati (taxminan 15 daqiqa) tizimga ilovani energiya samaradorligi imkon bergandek tez-tez uyg'otishni bildiradi. application(_:didFinishLaunchingWithOptions:) ichida intervalni o'rnatish standart amaliyotdir.

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

Info.plist va capability

Background Fetch Xcode-da yoqilganda avtomatik ravishda Info.plist ni yangilaydi — UIBackgroundModes kalitini fetch qiymati bilan qo'shadi. Bu majburiy qadam: usiz ilova performFetchWithCompletionHandler chaqiruvini olmaydi. Mavjudligini P list Source yoki Build Settings orqali tekshirishingiz mumkin.

Swift-da Background Fetch kod misollari

Yangiliklar ilovasi uchun Background Fetch ning to'liq tatbiqini ko'rib chiqamiz. Tatbiq ma'lumot yuklash, keshlash va completion handler chaqirishni o'z ichiga oladi. Kod AppDelegate da bajariladi — tizim fetch chaqiradigan yagona joy.

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()
}

Yuklangan ma'lumotlarni keshlash

Background Fetch orqali ma'lumot yuklangandan so'ng ularni mahalliy omborga — CoreData, UserDefaults yoki File Manager ga saqlash kerak. Ilova ochilganda ma'lumotlar allaqachon mavjud bo'lishi kerak. Xavfsiz yozish uchun fon kontekstli CoreData dan foydalaning. Saqlashdan so'ng UI ni asosiy oqimda yangilang.

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 ni test qilish

Test qilish uchun Simulator dan foydalaning — Xcode-da Debug — Simulate Background Fetch ni tanlang. Fizik qurilmada tizim fetch ni bajarishga qaror qilguncha kutish kerak. Tezlashtirish uchun minimal intervalni 1 daqiqaga o'rnatish mumkin, ammo tizim batareya past bo'lganda uni hali ham e'tiborsiz qoldirishi mumkin.

Cheklovlar va tuzoqlar

Background Fetch bir qator cheklovlarga ega, ularni ilova arxitekturasini loyihalashda hisobga olish muhim. Asosiysi — tizim chaqiruvlar chastotasini to'liq nazorat qiladi va dasturchi uni kafolatlay olmaydi. Hatto minimal interval o'rnatilgan bo'lsa ham, tizim fetch ni soatlab chaqirmasligi mumkin.

Ijro vaqti cheklovi

Tizim ilovaga vazifani bajarish uchun cheklangan vaqt ajratadi — odatda 30 soniyagacha. Agar ilova bu vaqt ichida completion handler chaqirmasa, tizim jarayonni majburiy tugatadi va kelajakdagi uyg'otishlar chastotasini kamaytiradi. Barcha tarmoq so'rovlari ixcham bo'lishi kerak — chaqiruvda 1–2 tadan ko'p emas.

Batareyaga bog'liqlik

iOS Background Fetch rejalashtirishda batareya zaryad darajasini hisobga oladi. Daraja 20% dan past bo'lganda, uyg'otish chastotasi kamayadi. Low Power Mode rejimi yoqilganda, tizim barcha ilovalar uchun fon yangilanishlarini butunlay o'chirib qo'yishi mumkin. Foydalanuvchi sozlamalarda ma'lum bir ilova uchun Background App Refresh ni ham o'chirib qo'yishi mumkin.

Tarmoq cheklovlari

Background Fetch dan ishga tushirilgan URLSession standart rejimda ishlaydi — fon sessiyalarini qo'llab-quvvatlamaydi. Katta yuklamalar uchun URLSession background configuration dan foydalaning. Tizim fetch tugaganidan keyin ham yuklashni davom ettiradi, ammo keyingi uyg'otishgacha taraqqiyot kuzatilmaydi.

Background Fetch-dan BGTaskScheduler-ga migratsiya

iOS 13 dan boshlab, Apple BGTaskScheduler ni Background Fetch o'rniga tavsiya qiladi. BGTaskScheduler yanada moslashuvchan rejalashtirish, ikki turdagi vazifalar (refresh va processing) va identifikatorlar bilan vazifalarni ro'yxatdan o'tkazishni ta'minlaydi. Migratsiya bir necha qadamlarni o'z ichiga oladi va barcha yangi loyihalar uchun tavsiya etiladi.

Bosqichma-bosqich migratsiya

Birinchi qadam — Info.plist da BGTaskSchedulerPermittedIdentifiers kaliti orqali vazifa identifikatorlarini aniqlash. Ikkinchi — BGTaskScheduler.shared.register orqali AppDelegate da vazifalarni ro'yxatdan o'tkazish. Uchinchi — performFetchWithCompletionHandler chaqiruvini register ga uzatilgan handler bilan almashtirish. To'rtinchi — vazifani rejalashtirish uchun submit chaqirish.

swift
// Oldin (Background Fetch)
UIApplication.shared.setMinimumBackgroundFetchInterval(
    UIApplication.backgroundFetchIntervalMinimum
)

// Migratsiyadan keyin (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 afzalliklari

BGTaskScheduler ko'proq nazorat beradi: BGProcessingTask uzoq muddatli operatsiyalar uchun (10 daqiqagacha), requiresNetworkConnectivity va requiresExternalPower orqali bajarish shartlari, silliq tugatish uchun expiration handler. Tizim ham ilova foydalanishini tahlil qiladi, ammo dasturchi aniqroq talablarni belgilashi mumkin.

Background Fetch qachon saqlanishi kerak

Agar ilova iOS 12 va undan pastini qo'llab-quvvatlasa, Background Fetch davriy yangilash uchun yagona variant bo'lib qoladi. BGTaskScheduler faqat iOS 13+ da mavjud. Bunday holda, o'ramdan foydalaning: BGTaskScheduler mavjudligini if #available(iOS 13, *) orqali tekshiring va tegishli API ni chaqiring.

Tez-tez beriladigan savollar

iOS Background Fetch ni qanchalik tez-tez chaqiradi?

Aniq chastota hujjatlashtirilmagan va foydalanuvchi xatti-harakatiga bog'liq. Tizim tahlil qiladi, foydalanuvchi ilovani qanchalik tez-tez ochishini va chastotani mos ravishda sozlaydi. O'rtacha, faol foydalanishda fetch soatiga 1–3 marta chaqirilishi mumkin. Kam foydalanishda — kuniga 1–2 marta.

Nega mening Background Fetch chaqirilmaydi?

Uchta shartni tekshiring: Background Fetch capability Xcode-da yoqilgan, minimumBackgroundFetchInterval o'rnatilgan va foydalanuvchi sozlamalarda ilova uchun Background App Refresh ni o'chirmagan. Shuningdek, qurilma Low Power Mode da emasligini va batareya darajasi 20% dan yuqori ekanligini tekshiring.

Background Fetch va BGAppRefreshTask o'rtasidagi farq nima?

Background Fetch — eski API (iOS 7), BGAppRefreshTask — yangi API (iOS 13+). BGAppRefreshTask ko'proq nazoratni ta'minlaydi: expiration handler, qayta rejalashtirish imkoniyati va status tekshiruvi. Background Fetch tatbiqda soddaroq, ammo kamroq moslashuvchan. Apple yangi loyihalar uchun BGAppRefreshTask ni ishlatishni tavsiya qiladi.

Background Fetch orqali katta fayllarni yuklash mumkinmi?

Tavsiya etilmaydi. Background Fetch vaqt jihatdan cheklangan (30 soniyagacha). Katta yuklamalar uchun background configuration bilan URLSession dan foydalaning — tizim fetch tugaganidan keyin ham yuklashni davom ettiradi. Alternativ — BGProcessingTask (iOS 13+), bu yerda 10 daqiqagacha vaqt va zaryadlash shartlari mavjud.

Background Fetch batareyani sarflaydimi?

Ha, har bir uyg'otish protsessorni yoqish, tarmoq stekini ishga tushirish va ma'lumot yuklash uchun energiya sarflaydi. iOS optimallashtiradi chastotani, ta'sirni minimallashtirish uchun. To'g'ri tatbiqda — faqat yangi ma'lumotlarni yuklash, completion handler ni tez chaqirish — batareyaga ta'sir minimal.

Xulosa

  • Background Fetch — fonda davriy ma'lumot yuklash uchun iOS API, iOS 7 dan mavjud va BGTaskScheduler bilan almashtirish tavsiya etiladi.
  • Tizim boshqaradi chaqiruv chastotasini foydalanuvchi xatti-harakatlarini tahlil qilib — dasturchi uyg'otish vaqtini kafolatlay olmaydi.
  • Uch status completion handler — .newData, .noData, .failed — ilovaning kelajakdagi uyg'otish chastotasiga ta'sir qiladi.
  • 30 soniya cheklovi — uzoq muddatli operatsiyalar yoki ketma-ket bir nechta tarmoq so'rovlarini bajarmang.
  • Capability majburiy — Xcode-da Background Fetch + kodda minimumBackgroundFetchInterval o'rnatish.
  • BGTaskScheduler — iOS 13+ dan zamonaviy o'rinbosar, ko'proq nazorat va ikki turdagi vazifalarni ta'minlaydi.
  • iOS 12 va undan pastini qo'llab-quvvatlovchi loyihalar uchun Background Fetch dan foydalaning, BGTaskScheduler mavjudligini if #available bilan tekshiring.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing