Background Modes হল iOS-এর ঘোষণাযোগ্য ক্ষমতার একটি সেট যা একটি অ্যাপকে ব্যাকগ্রাউন্ডে চলে যাওয়ার পরে কোড চালিয়ে যাওয়ার অনুমতি দেয়। প্রতিটি মোড একটি নির্দিষ্ট ধরনের কাজের সাথে মিলে যায়: অডিও, জিওলোকেশন, VoIP, Bluetooth, fetch এবং processing। Apple, 2026 অনুসারে, Background Modes-এর ভুল ব্যবহার App Store পর্যালোচনায় অ্যাপ প্রত্যাখ্যানের একটি সাধারণ কারণ।
মূল পয়েন্ট
Background Modes হল Xcode প্রকল্পের ক্ষমতা যা ব্যাকগ্রাউন্ডে নির্দিষ্ট ধরনের অপারেশন করার জন্য অ্যাপের অভিপ্রায় ঘোষণা করে। Android-এর বিপরীতে, যেখানে একটি অ্যাপ ব্যাকগ্রাউন্ডে যেকোনো Service শুরু করতে পারে, iOS-এ Info.plist-এ মোডের স্পষ্ট ঘোষণা প্রয়োজন। প্রতিটি মোডের কঠোর ব্যবহারের নিয়ম রয়েছে এবং Apple পর্যালোচনার সময় তা যাচাই করে।
যখন একটি অ্যাপ ব্যাকগ্রাউন্ডে চলে যায়, iOS এটি 3–5 সেকেন্ডের মধ্যে স্থগিত করে দেয়। যদি অ্যাপটি Background Mode ঘোষণা করে এবং সংশ্লিষ্ট API (যেমন অডিওর জন্য AVAudioSession) সক্রিয়ভাবে ব্যবহার করে, সিস্টেম এটিকে একটি বিশেষ এক্সিকিউশন মোডে রাখে। অ্যাপটি মেমরিতে থাকে এবং মোডের ধরন দ্বারা সীমিত কোড চালাতে পারে।
iOS নিম্নলিখিত Background Modes সমর্থন করে: Audio (অডিও), Location (অবস্থান), VoIP, Bluetooth LE (BLE আনুষাঙ্গিক), Background Fetch (পর্যায়ক্রমিক আপডেট), Background Processing (দীর্ঘ কাজ), External Accessory Communication, Push to Talk (PTT), এবং HealthKit। প্রতিটি মোড অ্যাপ বর্ণনায় যুক্তির প্রয়োজন।
| মোড | Info.plist কী | উদ্দেশ্য | iOS সংস্করণ |
|---|---|---|---|
| Audio | audio | ব্যাকগ্রাউন্ড অডিও, AirPlay | 4.0+ |
| Location | location | অবস্থান ট্র্যাকিং | 4.0+ |
| VoIP | voip | VoIP পুশ বিজ্ঞপ্তি | 4.0+ |
| BLE | bluetooth-central | BLE ডিভাইসের সাথে কাজ | 7.0+ |
| Fetch | fetch | পর্যায়ক্রমিক ডেটা ডাউনলোড | 7.0+ |
| Processing | processing | দীর্ঘ ব্যাকগ্রাউন্ড কাজ | 13.0+ |
| Push to Talk | push-to-talk | পুশ-টু-টক ভয়েস | 16.0+ |
Audio Background Mode সবচেয়ে সাধারণ মোড, যা মিউজিক প্লেয়ার, পডকাস্ট অ্যাপ এবং অডিও পরিষেবা দ্বারা ব্যবহৃত হয়। অ্যাপটি অডিও প্লেব্যাক চালিয়ে যেতে পারে, কন্ট্রোল সেন্টারের মাধ্যমে নিয়ন্ত্রিত হতে পারে এবং লক স্ক্রিনে প্রদর্শিত হতে পারে। এটি সক্রিয় করতে, .playback ক্যাটাগরি সহ AVAudioSession কনফিগার করা যথেষ্ট।
ব্যাকগ্রাউন্ডে অডিও কাজ করার জন্য, AVAudioSession কনফিগার এবং সক্রিয় করা প্রয়োজন। .playback ক্যাটাগরি সিস্টেমকে জানায় যে অ্যাপটি অডিও চালাচ্ছে এবং ব্যাকগ্রাউন্ডে সক্রিয় থাকা উচিত। এই কনফিগারেশন ছাড়া, অ্যাপ ছোট করার 5–10 সেকেন্ড পরে অডিও বন্ধ হয়ে যাবে।
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("অডিও সেশন ত্রুটি: \(error)")
}
}
কন্ট্রোল সেন্টার এবং লক স্ক্রিনের সাথে একীকরণের জন্য, MPRemoteCommandCenter কনফিগার করা প্রয়োজন। এটি প্লে, পজ, পরবর্তী এবং পূর্ববর্তী ট্র্যাক কমান্ডগুলি পরিচালনা করে। মেটাডেটা প্রদর্শনের জন্য MPNowPlayingInfoProperty আপডেট করাও প্রয়োজন: ট্র্যাক নাম, শিল্পী, আর্টওয়ার্ক এবং প্লেব্যাক অগ্রগতি।
iOS 14 থেকে শুরু করে, Audio Background Mode ভিডিওর জন্য Picture in Picture-ও সমর্থন করে। অ্যাপটি ছোট করার সময় ফ্লোটিং উইন্ডোতে ভিডিও দেখানো চালিয়ে যেতে পারে। সক্রিয় করতে, AVPlayerLayer-এর সাথে AVPictureInPictureController ব্যবহার করুন। এই মোডটি কেবল তখনই কাজ করে যখন অ্যাপটি একটি অডিও ট্র্যাক চালায়।
Location Background Mode অ্যাপকে ব্যাকগ্রাউন্ডে অবস্থান আপডেট গ্রহণের অনুমতি দেয়। এটি নেভিগেশন অ্যাপ, ফিটনেস ট্র্যাকার, ডেলিভারি অ্যাপ এবং সোশ্যাল নেটওয়ার্কে ব্যবহৃত হয়। এই মোড ছাড়া, অ্যাপ ব্যাকগ্রাউন্ডে যাওয়ার সময় কেবল একবার অবস্থান পায়, তারপর আপডেট বন্ধ হয়ে যায়।
CLLocationManager বেশ কয়েকটি ট্র্যাকিং কৌশল সমর্থন করে: গুরুত্বপূর্ণ পরিবর্তন অবস্থান, মানক অবস্থান ট্র্যাকিং এবং অঞ্চল পর্যবেক্ষণ। সর্বোচ্চ নির্ভুলতার সাথে ব্যাকগ্রাউন্ড কাজের জন্য, allowsBackgroundLocationUpdates = true এবং pausesLocationUpdatesAutomatically = false ব্যবহার করুন।
ব্যাকগ্রাউন্ডে ক্রমাগত অবস্থান ট্র্যাকিং সবচেয়ে শক্তি-নিবিড় পরিস্থিতিগুলির মধ্যে একটি। iOS স্বয়ংক্রিয়ভাবে গতির উপর ভিত্তি করে আপডেট ফ্রিকোয়েন্সি সামঞ্জস্য করে: হাঁটার সময় প্রতি 10–30 সেকেন্ডে, গাড়ি চালানোর সময় প্রতি 1–5 সেকেন্ডে। নেভিগেশনের জন্য, desiredAccuracy = kCLLocationAccuracyBestForNavigation ব্যবহার করুন।
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
significant-change location মোড Location Background Mode ছাড়া কাজ করে — সিস্টেম অ্যাপকে জাগায় কেবল যখন স্থানাঙ্ক গুরুত্বপূর্ণভাবে পরিবর্তিত হয় (সাধারণত 500 মি বা তার বেশি)। এটি ধ্রুবক GPS প্রয়োজন হয় না, ব্যাটারি বাঁচায়। আবহাওয়া অ্যাপের জন্য উপযুক্ত যা ব্যবহারকারী স্থানান্তরিত হলে ডেটা আপডেট করে।
Bluetooth LE Background Mode অ্যাপকে ব্যাকগ্রাউন্ডে BLE ডিভাইসের সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয়। এটি ফিটনেস ব্যান্ড, মেডিকেল সেন্সর, স্মার্ট হোম ডিভাইস এবং বীকন নেভিগেশনে ব্যবহৃত হয়। মোডটি দুটি উপপ্রকারে বিভক্ত: bluetooth-central (অ্যাপ ডিভাইসের সাথে সংযোগ করে) এবং bluetooth-peripheral (অ্যাপ একটি ডিভাইস হিসেবে কাজ করে)।
Central হিসেবে কাজ করা অ্যাপ ব্যাকগ্রাউন্ডে BLE ডিভাইস স্ক্যান এবং সংযোগ করতে পারে। এটি করতে, Background Modes-এ bluetooth-central নির্দিষ্ট করুন এবং CBCentralManagerScanOptionAllowDuplicatesKey বিকল্প সহ CBCentralManager.scanForPeripherals কল করুন। ব্যাকগ্রাউন্ডে, স্ক্যানিং কম ফ্রিকোয়েন্সিতে চলে — সিস্টেম শক্তি বাঁচাতে আবিষ্কারে বিলম্ব করতে পারে।
Peripheral হিসেবে কাজ করা অ্যাপ পরিষেবা বিজ্ঞাপন দিতে পারে এবং অন্যান্য ডিভাইসের অনুরোধে সাড়া দিতে পারে। bluetooth-peripheral মোড অ্যাপকে ব্যাকগ্রাউন্ডেও অন্যান্য BLE ডিভাইসের কাছে দৃশ্যমান থাকতে দেয়। এটি HealthKit অ্যাপ এবং IoT সমাধানে ব্যবহৃত হয়।
iBeacon পর্যবেক্ষণ অতিরিক্ত অনুমতি ছাড়া ব্যাকগ্রাউন্ডে কাজ করে — সিস্টেম নিজেই বীকন অঞ্চলে প্রবেশ এবং প্রস্থান ট্র্যাক করে। কিন্তু বীকন বিষয়বস্তু (proximity UUID, major, minor) স্ক্যান করতে Bluetooth অনুমতি এবং bluetooth-central Background Mode প্রয়োজন। পর্যবেক্ষণের জন্য CLBeaconRegion সহ CLLocationManager ব্যবহার করুন।
VoIP Background Mode ভয়েস যোগাযোগ অ্যাপের (Skype, Zoom, WhatsApp) জন্য ডিজাইন করা হয়েছে। এই মোড অ্যাপকে আগত কল গ্রহণের জন্য সার্ভারের সাথে সংযুক্ত থাকতে দেয়। iOS 8 থেকে শুরু করে, VoIP-এর জন্য PushKit ব্যবহার করা হয় — একটি ফ্রেমওয়ার্ক যা APNs-কে জড়িত না করে VoIP সার্ভার থেকে পুশ বিজ্ঞপ্তি পরিচালনা করে।
PushKit একমাত্র প্রক্রিয়া যা ডিভাইসে VoIP বিজ্ঞপ্তি সরবরাহের নিশ্চয়তা দেয়। যখন একটি PushKit বিজ্ঞপ্তি পাওয়া যায়, সিস্টেম অ্যাপকে জাগায়, এমনকি যদি এটি শেষ করা হয়েছিল। অ্যাপটিকে 30 সেকেন্ডের মধ্যে সার্ভারের সাথে সংযোগ স্থাপন করতে হবে এবং আগত কলের জন্য একটি স্থানীয় বিজ্ঞপ্তি প্রদর্শন করতে হবে।
import PushKit
class VoIPHandler: NSObject, PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType,
completion: @escaping () -> Void
) {
let caller = payload.dictionaryPayload["caller"] as! String
reportIncomingCall(from: caller)
completion()
}
}
PushKit সাধারণ বিজ্ঞপ্তির জন্য ব্যবহার করা যাবে না — কেবল VoIP, watchOS যোগাযোগ এবং ফাইল প্রদানকারীর জন্য। Apple পর্যালোচনার সময় এটি যাচাই করে। অনুচিত ব্যবহার অ্যাপ প্রত্যাখ্যানের দিকে নিয়ে যায়। iOS 13 থেকে শুরু করে, PushKit কেবল বিজ্ঞপ্তি সরবরাহ করে — কল স্ক্রিন প্রদর্শনের জন্য CXProvider (CallKit) কল করা বাধ্যতামূলক।
Background Fetch এবং Background Processing ব্যাকগ্রাউন্ড সামগ্রী আপডেট এবং দীর্ঘ কাজের জন্য মোড। Fetch ছোট পর্যায়ক্রমিক আপডেটের (30 সেকেন্ড পর্যন্ত) জন্য, Processing শর্তসহ (Wi-Fi, চার্জিং) দীর্ঘ কাজের (10 মিনিট পর্যন্ত) জন্য। Processing কেবল iOS 13+ এ উপলব্ধ।
Fetch মোড সিস্টেমকে নতুন সামগ্রী ডাউনলোড করতে পর্যায়ক্রমে অ্যাপ জাগানোর অনুমতি দেয়। সিস্টেম ব্যবহারকারীর আচরণ বিশ্লেষণ করে এবং সর্বোত্তম সময় নির্বাচন করে। অ্যাপটিকে 30 সেকেন্ডের মধ্যে completion handler কল করতে হবে। Fetch সংবাদ অ্যাপ, সোশ্যাল মিডিয়া ফিড এবং আবহাওয়ার জন্য উপযুক্ত।
BGProcessingTask ব্যবহারকারীর হস্তক্ষেপ ছাড়া চলতে পারে এমন কাজের জন্য ডিজাইন করা হয়েছে: ক্যাশে পরিষ্কার, বড় ডাটাবেস সিঙ্ক্রোনাইজেশন, মিডিয়া ফাইল প্রক্রিয়াকরণ। সিস্টেম কেবল অনুকূল অবস্থায় কাজ শুরু করে — ডিভাইস চার্জ হচ্ছে, Wi-Fi সংযুক্ত, লো পাওয়ার মোডে নয়। 10 মিনিট পর্যন্ত উপলব্ধ।
BGProcessingTask-এর জন্য, requiresExternalPower এবং requiresNetworkConnectivity নির্দিষ্ট করা প্রয়োজন। শর্ত পূরণ না হলে সিস্টেম নির্বাহ অনির্দিষ্টকালের জন্য স্থগিত করতে পারে। BGAppRefreshTask-এর বিপরীতে, যা দিনে কমপক্ষে একবার নির্বাহ করতে হবে, Processing সপ্তাহ ধরে নির্বাহ নাও হতে পারে যদি ডিভাইস খুব কমই চার্জ করা হয়।
Apple অ্যাপ পর্যালোচনার সময় Background Modes-এর ব্যবহার কঠোরভাবে যাচাই করে। মূল নিয়ম: প্রতিটি সক্রিয় মোড অ্যাপের কার্যকারিতা দ্বারা ন্যায়সঙ্গত হতে হবে। যদি একটি অ্যাপ Location Mode ঘোষণা করে কিন্তু জিওলোকেশন ব্যবহার না করে, তবে এটি ক্ষমতা অপসারণের প্রয়োজনীয়তার সাথে প্রত্যাখ্যান করা হবে।
সবচেয়ে সাধারণ লঙ্ঘন: Location Mode স্পষ্ট প্রয়োজন ছাড়া (অ্যাপ বিজ্ঞাপন দেখানোর জন্য “সর্বদা” অ্যাক্সেসের অনুরোধ করে), ব্যাকগ্রাউন্ড অডিও প্লেব্যাক ছাড়া Audio Mode, PushKit ছাড়া VoIP, Bluetooth ডিভাইস ছাড়া BLE Mode। Apple আপডেট পর্যায়েও অ্যাপ প্রত্যাখ্যান করতে পারে যদি মোড আর ব্যবহার না হয়।
পর্যালোচনার জন্য জমা দেওয়ার সময়, নোটে প্রতিটি মোডের জন্য নির্দিষ্ট যুক্তি প্রদান করুন। উদাহরণস্বরূপ, “Location Background Mode ফিটনেস বৈশিষ্ট্যে ব্যবহারকারীর রুট ট্র্যাক করতে ব্যবহৃত হয়।” ব্যাখ্যা ছাড়া, পর্যালোচক অ্যাপ প্রত্যাখ্যান করতে পারে। গোপনীয় বৈশিষ্ট্যের (VoIP) জন্য, Apple একটি পরীক্ষা অ্যাকাউন্টের অনুরোধ করতে পারে।
মোডের ন্যূনতম প্রয়োজনীয় সেট ব্যবহার করুন। যদি আপনার অ্যাপের প্রতি ঘন্টায় একবার ব্যাকগ্রাউন্ড ডেটা ডাউনলোডের প্রয়োজন হয় — Location Mode সক্রিয় করবেন না, Fetch বা BGAppRefreshTask ব্যবহার করুন। অতিরিক্ত মোড কেবল প্রত্যাখ্যানের দিকে নিয়ে যায় না, বরং নেতিবাচক প্রভাবও তৈরি করে: ব্যবহারকারী সেটিংসে দেখে যে অ্যাপ ব্যাকগ্রাউন্ডে জিওলোকেশন ব্যবহার করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
সংখ্যার কোন সীমা নেই, তবে প্রতিটি মোড অ্যাপের কার্যকারিতা দ্বারা ন্যায়সঙ্গত হতে হবে। প্রয়োজন ছাড়া সমস্ত মোড সক্রিয় করা পর্যালোচনার সময় প্রত্যাখ্যানের একটি নিশ্চিত কারণ। ব্যবহারিক সীমা প্রতি অ্যাপে 2–3 মোড, অন্যথায় ব্যবহারকারী অনেক অনুমতি অনুরোধ দেখতে পাবে।
UIApplication.shared.applicationState ব্যবহার করুন — অ্যাপ যাচাই করতে পারে যে এটি ব্যাকগ্রাউন্ডে আছে কিনা (state == .background)। আচরণ পরিবর্তন করতে UIApplication.didEnterBackgroundNotification এবং willEnterForegroundNotification বিজ্ঞপ্তিও পর্যবেক্ষণ করা যেতে পারে।
Audio — স্পিকার বা হেডফোনের মাধ্যমে শব্দ চালানো। AirPlay — Apple TV এবং অন্যান্য AirPlay ডিভাইসে অডিও এবং ভিডিও স্ট্রিম করা। বাস্তবে, Audio Mode উভয় পরিস্থিতিই কভার করে কারণ AirPlay অডিও সেশন ব্যবহার করে। iOS 7+ থেকে আলাদা AirPlay মোডের প্রয়োজন নেই।
হ্যাঁ, এর জন্য requestAlwaysAuthorization-এর পরিবর্তে requestWhenInUseAuthorization() ব্যবহার করুন। অ্যাপ কেবল ফোরগ্রাউন্ডে অবস্থান পাবে। ব্যাকগ্রাউন্ডে স্বল্পমেয়াদী ট্র্যাকিং প্রয়োজন হলে, startUpdatingLocation() কল করুন এবং willResignActive-এ বন্ধ করুন।
প্রতিটি মোড শক্তি খরচ বাড়ায়। Location Mode সবচেয়ে চাহিদাপূর্ণ, ক্রমাগত ট্র্যাকিংয়ে ব্যাটারির আয়ু 30–50% কমাতে পারে। Audio Mode মাঝারি (15–20%)। Fetch এবং Processing ন্যূনতম (2–5%)। BLE Mode Bluetooth LE-এর শক্তি দক্ষতার কারণে কম (5–10%)।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন