Background Fetch एक iOS तंत्र है जो नई सामग्री डाउनलोड करने के लिए समय-समय पर बैकग्राउंड में ऐप को जगाता है। सिस्टम उपयोगकर्ता के व्यवहार का विश्लेषण करता है और अपडेट के लिए इष्टतम विंडो चुनता है। Apple, 2026 के अनुसार, ऐप को ऑपरेशन करने के लिए 30 से 120 सेकंड मिलते हैं, जिसके बाद सिस्टम प्रक्रिया को निलंबित या समाप्त कर देता है।
मुख्य बातें
Background Fetch एक iOS API है जो ऐप को बैकग्राउंड में समय-समय पर नया डेटा प्राप्त करने की अनुमति देता है। पहली बार iOS 7 में Background App Refresh तंत्र के साथ पेश किया गया था। मुख्य लक्ष्य यह है कि जब उपयोगकर्ता ऐप खोले तब तक सामग्री अपडेट हो, बिना लोड होने की प्रतीक्षा किए।
पुश सूचनाएँ सर्वर द्वारा शुरू की जाती हैं — सर्वर डिवाइस पर सिग्नल भेजता है, और सिस्टम तय करता है कि ऐप को जगाना है या नहीं। Background Fetch iOS द्वारा ही डिवाइस उपयोग पैटर्न के आधार पर शुरू किया जाता है। पुश तत्काल संदेशों के लिए उपयुक्त है, जबकि Fetch निर्धारित सामग्री अपडेट (समाचार, सोशल मीडिया फ़ीड) के लिए।
Background Fetch iOS में बैकग्राउंड निष्पादन के कई तंत्रों में से एक है। BGAppRefreshTask (iOS 13+) समान कार्य करता है लेकिन अधिक लचीली शेड्यूलिंग के साथ। Background Modes (ऑडियो, स्थान) निरंतर संचालन के लिए हैं। Silent Push सर्वर-शुरू किए गए अपडेट हैं। Fetch iOS 12 और उससे नीचे का समर्थन करने वाली परियोजनाओं के लिए प्रासंगिक बना हुआ है।
iOS ऐप को जगाने के लिए इष्टतम समय निर्धारित करने हेतु मशीन लर्निंग एल्गोरिदम का उपयोग करता है। सिस्टम विश्लेषण करता है कि उपयोगकर्ता आमतौर पर ऐप कब खोलता है, कितने समय तक उपयोग करता है और कितनी बार लौटता है। इस डेटा के आधार पर, iOS Background Fetch के लिए विंडो की गणना करता है।
जब सिस्टम ऐप को जगाने का निर्णय लेता है, तो यह AppDelegate में application(_:performFetchWithCompletionHandler:) विधि को कॉल करता है। ऐप को न्यूनतम मात्रा में नया डेटा लोड करना चाहिए और तीन स्थितियों में से एक के साथ कम्पलीशन हैंडलर को कॉल करना चाहिए: .newData (डेटा लोड हुआ), .noData (कोई नया डेटा नहीं) या .failed (त्रुटि)। स्थिति भविष्य में जागने की आवृत्ति को प्रभावित करती है।
.newData स्थिति सिस्टम को बताती है कि अपडेट उपयोगी था — iOS जागने की आवृत्ति बढ़ा सकता है। .noData इंगित करता है कि कोई डेटा नहीं है — आवृत्ति वही रहती है या घट जाती है। .failed समस्या का संकेत देता है — सिस्टम बैटरी बचाने के लिए आवृत्ति कम करता है। जोर ईमानदार स्थिति पर होना चाहिए, .newData को बलपूर्वक लागू करने पर नहीं।
| स्थिति | अर्थ | प्रभाव |
|---|---|---|
| .newData | डेटा सफलतापूर्वक लोड हुआ | आवृत्ति बढ़ सकती है |
| .noData | जाँच में कोई नया डेटा नहीं मिला | आवृत्ति वही रहती है |
| .failed | नेटवर्क या सर्वर त्रुटि | आवृत्ति घट जाती है |
Background Fetch सक्षम करने के लिए दो कदम आवश्यक हैं: Xcode में क्षमता सक्रिय करें और कोड में न्यूनतम अंतराल सेट करें। क्षमता Target — Signing & Capabilities — Background Modes — Background Fetch बॉक्स चेक करने में स्थित है। इस कदम के बिना, सिस्टम ऐप को नहीं जगाएगा।
UIApplication.shared.setMinimumBackgroundFetchInterval विधि Fetch कॉल के बीच न्यूनतम समय सेकंड में सेट करती है। मान UIApplication.backgroundFetchIntervalMinimum (लगभग 15 मिनट) सिस्टम को बताता है कि ऐप को जितनी बार ऊर्जा-कुशल हो उतनी बार जगाए। application(_:didFinishLaunchingWithOptions:) में अंतराल सेट करना मानक अभ्यास है।
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey : Any]?
)-> Bool {
UIApplication.shared.setMinimumBackgroundFetchInterval(
UIApplication.backgroundFetchIntervalMinimum
)
return true
}
जब Xcode में Background Fetch सक्षम किया जाता है, यह स्वचालित रूप से Info.plist अपडेट करता है — UIBackgroundModes कुंजी को fetch मान के साथ जोड़ता है। यह एक अनिवार्य कदम है: इसके बिना ऐप को performFetchWithCompletionHandler कॉल नहीं मिलेगी। आप P list Source या Build Settings के माध्यम से सत्यापित कर सकते हैं।
आइए एक समाचार ऐप के लिए पूर्ण Background Fetch कार्यान्वयन देखें। कार्यान्वयन में डेटा लोडिंग, कैशिंग और कम्पलीशन हैंडलर कॉल शामिल है। कोड AppDelegate में निष्पादित होता है — एकमात्र स्थान जहाँ सिस्टम fetch को कॉल करता है।
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 के माध्यम से डेटा लोड करने के बाद, इसे स्थानीय स्टोरेज — CoreData, UserDefaults या File Manager में सहेजना आवश्यक है। जब तक ऐप खुलता है, डेटा पहले से उपलब्ध होना चाहिए। थ्रेड-सुरक्षित लेखन के लिए बैकग्राउंड कॉन्टेक्स्ट के साथ CoreData का उपयोग करें। सहेजने के बाद, मुख्य थ्रेड पर UI अपडेट करें।
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()
}
}
परीक्षण के लिए, सिम्युलेटर का उपयोग करें — Xcode में Debug — Simulate Background Fetch चुनें। भौतिक डिवाइस पर, आपको सिस्टम द्वारा fetch करने का निर्णय लेने तक प्रतीक्षा करनी होगी। गति बढ़ाने के लिए, आप न्यूनतम अंतराल 1 मिनट सेट कर सकते हैं, लेकिन बैटरी कम होने पर सिस्टम इसे अनदेखा कर सकता है।
Background Fetch की कई सीमाएँ हैं जिन्हें ऐप आर्किटेक्चर डिज़ाइन करते समय ध्यान में रखना महत्वपूर्ण है। मुख्य बात यह है कि सिस्टम पूरी तरह से कॉल आवृत्ति को नियंत्रित करता है, और डेवलपर इसकी गारंटी नहीं दे सकता। न्यूनतम अंतराल सेट होने पर भी, सिस्टम घंटों तक fetch को कॉल नहीं कर सकता।
सिस्टम कार्य निष्पादित करने के लिए ऐप को सीमित समय आवंटित करता है — आमतौर पर 30 सेकंड तक। यदि ऐप उस समय के भीतर कम्पलीशन हैंडलर को कॉल नहीं करता है, तो सिस्टम जबरन प्रक्रिया समाप्त कर देता है और भविष्य में जागने की आवृत्ति कम कर देता है। सभी नेटवर्क अनुरोध संक्षिप्त होने चाहिए — प्रति कॉल 1-2 से अधिक नहीं।
iOS Background Fetch शेड्यूल करते समय बैटरी स्तर को ध्यान में रखता है। जब चार्ज 20% से नीचे होता है, तो जागने की आवृत्ति कम हो जाती है। जब लो पावर मोड सक्षम होता है, तो सिस्टम सभी ऐप के लिए बैकग्राउंड अपडेट पूरी तरह से अक्षम कर सकता है। उपयोगकर्ता सेटिंग्स में किसी विशिष्ट ऐप के लिए Background App Refresh भी अक्षम कर सकता है।
Background Fetch से शुरू URLSession मानक मोड में काम करता है — बैकग्राउंड सत्र समर्थन के बिना। बड़े डाउनलोड के लिए, बैकग्राउंड कॉन्फ़िगरेशन के साथ URLSession का उपयोग करें। सिस्टम fetch पूरा होने के बाद भी डाउनलोड जारी रखेगा, लेकिन अगले जागने तक प्रगति ट्रैक नहीं की जाएगी।
iOS 13 से शुरू करते हुए, Apple BGTaskScheduler को Background Fetch के प्रतिस्थापन के रूप में अनुशंसित करता है। BGTaskScheduler अधिक लचीली शेड्यूलिंग, दो कार्य प्रकार (refresh और processing) और पहचानकर्ताओं के साथ कार्य पंजीकरण प्रदान करता है। स्थानांतरण में कई कदम शामिल हैं और सभी नई परियोजनाओं के लिए अनुशंसित है।
पहला कदम — BGTaskSchedulerPermittedIdentifiers कुंजी के माध्यम से Info.plist में कार्य पहचानकर्ता परिभाषित करना। दूसरा — BGTaskScheduler.shared.register के माध्यम से AppDelegate में कार्य पंजीकृत करना। तीसरा — performFetchWithCompletionHandler कॉल को register को पारित हैंडलर से बदलना। चौथा — कार्य शेड्यूल करने के लिए submit कॉल करना।
// पहले (Background Fetch)
UIApplication.shared.setMinimumBackgroundFetchInterval(
UIApplication.backgroundFetchIntervalMinimum
)
// स्थानांतरण के बाद (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 अधिक नियंत्रण प्रदान करता है: लंबे संचालन के लिए BGProcessingTask (10 मिनट तक), requiresNetworkConnectivity और requiresExternalPower के माध्यम से निष्पादन शर्तें, और सुचारू समाप्ति के लिए expiration हैंडलर। सिस्टम ऐप उपयोग का भी विश्लेषण करता है, लेकिन डेवलपर अधिक सटीक आवश्यकताएँ निर्धारित कर सकता है।
यदि ऐप iOS 12 और उससे नीचे का समर्थन करता है, तो Background Fetch आवधिक अपडेट के लिए एकमात्र विकल्प बना रहता है। BGTaskScheduler केवल iOS 13+ से उपलब्ध है। इस मामले में, एक रैपर का उपयोग करें: if #available(iOS 13, *) के माध्यम से उपलब्धता जाँचें और उपयुक्त API कॉल करें।
अक्सर पूछे जाने वाले प्रश्न
सटीक आवृत्ति दस्तावेज़ित नहीं है और उपयोगकर्ता के व्यवहार पर निर्भर करती है। सिस्टम विश्लेषण करता है कि उपयोगकर्ता कितनी बार ऐप खोलता है और तदनुसार आवृत्ति समायोजित करता है। औसतन, सक्रिय उपयोग के साथ, fetch प्रति घंटे 1–3 बार कॉल हो सकता है। कम उपयोग के साथ — प्रति दिन 1–2 बार।
तीन शर्तें जाँचें: Background Fetch क्षमता Xcode में सक्षम है, minimumBackgroundFetchInterval सेट किया गया है, और उपयोगकर्ता ने सेटिंग्स में ऐप के लिए Background App Refresh अक्षम नहीं किया है। यह भी जाँचें कि डिवाइस लो पावर मोड में नहीं है और बैटरी स्तर 20% से ऊपर है।
Background Fetch पुराना API (iOS 7) है, BGAppRefreshTask नया API (iOS 13+) है। BGAppRefreshTask अधिक नियंत्रण प्रदान करता है: expiration हैंडलर, पुनर्निर्धारण क्षमता और स्थिति जाँच। Background Fetch लागू करने में सरल है लेकिन कम लचीला है। Apple नई परियोजनाओं के लिए BGAppRefreshTask का उपयोग करने की अनुशंसा करता है।
अनुशंसित नहीं है। Background Fetch समय-सीमित है (30 सेकंड तक)। बड़े डाउनलोड के लिए, बैकग्राउंड कॉन्फ़िगरेशन के साथ URLSession का उपयोग करें — सिस्टम fetch पूरा होने के बाद भी डाउनलोड जारी रखेगा। विकल्प BGProcessingTask (iOS 13+) है, जो 10 मिनट तक और चार्जिंग शर्तों की अनुमति देता है।
हाँ, प्रत्येक जागरण प्रोसेसर चालू करने, नेटवर्क स्टैक आरंभ करने और डेटा लोड करने के लिए ऊर्जा की खपत करता है। iOS आवृत्ति को अनुकूलित करता है प्रभाव को कम करने के लिए। सही कार्यान्वयन के साथ — केवल नया डेटा लोड करना, तेज़ कम्पलीशन हैंडलर कॉल — बैटरी पर प्रभाव न्यूनतम है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें