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 — 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 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).
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.
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.
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.
.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.
| Status | Ma'nosi | Ta'siri |
|---|---|---|
| .newData | Ma'lumot muvaffaqiyatli yuklandi | Chastota oshishi mumkin |
| .noData | Tekshiruv yangi ma'lumot bermadi | Chastota o'zgarishsiz qoladi |
| .failed | Tarmoq yoki server xatosi | Chastota kamayadi |
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.
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.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey : Any]?
)-> Bool {
UIApplication.shared.setMinimumBackgroundFetchInterval(
UIApplication.backgroundFetchIntervalMinimum
)
return true
}
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.
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.
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()
}
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.
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()
}
}
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.
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.
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.
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.
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.
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.
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.
// 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 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.
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
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.
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 — 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.
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.
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
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.