iOS میں CBCentralManager — یہ کیا ہے، BLE انتظام اور Core Bluetooth

مصنف: IT Sectr اشاعت: 2026-07-16 مطالعے کا وقت: 11 منٹ

CBCentralManager iOS میں Core Bluetooth فریم ورک کی مرکزی کلاس ہے جو BLE پیریفرل آلات کی اسکیننگ، کنکشن اور تعامل کو منظم کرتی ہے۔ Core Bluetooth (iOS 5+، 2011) GATT سطح پر BLE اسٹیک پر ایک اعلیٰ سطح کا تجرید فراہم کرتا ہے، جو Link Layer اور HCI کی تفصیلات کو ڈویلپر سے چھپاتا ہے۔ CBCentralManager Central کردار کو نافذ کرتا ہے: یہ scanForPeripherals کے ذریعے ہوا کو اسکین کرتا ہے، connect کے ذریعے کنکشن شروع کرتا ہے، discoverServices کے ذریعے سروسز دریافت کرتا ہے اور ڈیٹا کی منتقلی کا انتظام کرتا ہے۔ Apple Developer Documentation (2024) کے مطابق، CBCentralManager BLE 5.0 والے آلات پر BLE آلات سے 7 بیک وقت کنکشنز تک سپورٹ کرتا ہے۔

اہم نکات

  • CBCentralManager Central کردار میں BLE اسکیننگ، کنکشنز اور ڈیٹا کی منتقلی کے انتظام کے لیے iOS کلاس ہے۔
  • اسکیننگ scanForPeripherals کے ذریعے سروس UUID فلٹرنگ کے ساتھ شروع کی جاتی ہے تاکہ توانائی بچائی جا سکے۔
  • کنکشن connect(peripheral:options:) کے ذریعے ڈیلیگیٹ کے ذریعے حالت کی نگرانی کے ساتھ کیا جاتا ہے۔
  • iOS BLE 5.0 والے آلات پر 7 بیک وقت BLE کنکشنز تک سپورٹ کرتا ہے۔
  • بیک گراؤنڈ اسکیننگ کے لیے Background Modes میں bluetooth-central کو فعال کرنا اور CBCentralManagerScanOptionAllowDuplicatesKey استعمال کرنا ضروری ہے۔

CBCentralManager کیا ہے؟

CBCentralManager iOS پر BLE آرکیٹیکچر میں Central کردار کو نافذ کرنے کے لیے اہم Core Bluetooth کلاس ہے۔ یہ BLE کنکشن کے پورے لائف سائیکل کا انتظام کرتا ہے: اشتہار دینے والے آلات کی اسکیننگ سے لے کر ڈیٹا کی منتقلی اور منقطع ہونے تک۔ CBCentralManager CBCentralManagerDelegate کے ذریعے غیر متوازن طور پر کام کرتا ہے، بلوٹوتھ اسٹیک میں واقعات کے بارے میں ایپ کو مطلع کرتا ہے۔

CBCentralManager کو شروع کرنا state restoration کا عمل شروع کرتا ہے: مینیجر ڈیوائس پر بلوٹوتھ کی حالت چیک کرتا ہے اور اگر ایپ بند تھی تو پچھلے کنکشن بحال کرتا ہے۔ ابتدائی عمل بلوٹوتھ کی حالت کے لحاظ سے 50 سے 500 ms تک لگ سکتا ہے۔ کسی بھی BLE آپریشن کو شروع کرنے سے پہلے ایپ کو centralManagerDidUpdateState کال کا انتظار کرنا چاہیے۔

Core Bluetooth آرکیٹیکچر Delegation پیٹرن پر بنایا گیا ہے: CBCentralManager واقعہ کی پروسیسنگ (آلات کی دریافت، کنکشن، خرابیاں) CBCentralManagerDelegate پروٹوکول کو سونپتا ہے۔ کسی مخصوص پیریفرل کے ساتھ کام کرنے کے لیے، CBPeripheralDelegate پروٹوکول استعمال کیا جاتا ہے، جو دریافت شدہ سروسز، خصوصیات اور موصولہ ڈیٹا کے بارے میں مطلع کرتا ہے۔ یہ غیر متوازن ماڈل ایک نان بلاک کرنے والا یوزر انٹرفیس یقینی بناتا ہے۔

CBCentralManager کی حالتیں

CBCentralManager کئی حالتوں سے گزرتا ہے جو اس بات کا تعین کرتی ہیں کہ BLE اسٹیک دستیاب ہے یا نہیں۔ حالت ڈیلیگیٹ کے ذریعے منتقل کی جاتی ہے: centralManagerDidUpdateState(_:)۔ ڈویلپر کو تمام حالتوں کو سنبھالنا چاہیے — نہ صرف poweredOn، بلکہ وہ معاملات بھی جب بلوٹوتھ بند یا ناقابل دستیاب ہو۔

حالتقدرڈویلپر کارروائی
.poweredOnبلوٹوتھ آن اور تیار ہےاسکیننگ شروع کریں
.poweredOffبلوٹوتھ بند ہےصارف کو الرٹ دکھائیں
.unauthorizedکوئی اجازت نہیںترتیبات میں اجازت کی درخواست کریں
.unsupportedڈیوائس BLE کو سپورٹ نہیں کرتاBLE خصوصیات چھپائیں
.unknownحالت متعین نہیںاگلی اپڈیٹ کا انتظار کریں
.resettingبلوٹوتھ دوبارہ شروع ہو رہا ہےبحالی کا انتظار کریں

غیر مجاز حالت iOS 13+ سے زیادہ عام ہوتی جا رہی ہے۔ اس ورژن سے شروع کرتے ہوئے، ایپ میں Info.plist میں NSBluetoothAlwaysUsageDescription اجازت ہونی چاہیے۔ اس کے بغیر، مرکزی مینیجر .unauthorized حالت میں چلا جاتا ہے اور اسکیننگ ناممکن ہے۔ صارف ترتیبات > پرائیویسی > بلوٹوتھ میں کسی بھی وقت اجازت تبدیل کر سکتا ہے۔

BLE آلات کی اسکیننگ

scanForPeripherals(withServices:options:) اسکیننگ شروع کرنے کا اہم طریقہ ہے۔ withServices پیرامیٹر فلٹرنگ کے لیے سروس UUIDs کی ایک صف قبول کرتا ہے: اگر nil بھیجا جاتا ہے، تو تمام آلات دریافت ہو جائیں گے، جس سے بجلی کی کھپت میں نمایاں اضافہ ہوتا ہے۔ ہمیشہ ان سروس UUIDs کے ذریعے فلٹر کرنے کی سفارش کی جاتی ہے جن کی ایپ کو ضرورت ہے۔ اسکیننگ کے اختیارات میں CBCentralManagerScanOptionAllowDuplicatesKey (ایک ہی ڈیوائس کے بارے میں بار بار اطلاعات) شامل ہے۔

swift
import CoreBluetooth

class BLEController: NSObject,
    CBCentralManagerDelegate {

    private var centralManager: CBCentralManager!

    override init() {
        super.init()
        centralManager =
            CBCentralManager(
                delegate: self,
                queue: nil
            )
    }

    func startScanning() {
        let serviceUUID =
            CBUUID("180F") // بیٹری سروس

        centralManager.scanForPeripherals(
            withServices: [serviceUUID],
            options: [
                CBCentralManagerScanOptionAllowDuplicatesKey: false
            ]
        )
    }
}

جب کوئی ڈیوائس دریافت ہوتی ہے، تو centralManager(_:didDiscover:advertisementData:rssi:) کال کیا جاتا ہے۔ advertisementData پیرامیٹر میں اشتہاری پیکٹ ڈیٹا کی مکمل لغت ہوتی ہے، جس میں ڈیوائس کا نام (CBAdvertisementDataLocalNameKey)، سروس UUIDs (CBAdvertisementDataServiceUUIDsKey) اور کارخانہ دار کا ڈیٹا (CBAdvertisementDataManufacturerDataKey) شامل ہے۔ RSSI دریافت کے وقت dBm میں سگنل کی سطح ہے۔

پیریفرل سے کنکشن

connect(_:options:) دریافت شدہ پیریفرل کے ساتھ BLE کنکشن قائم کرنے کا طریقہ ہے۔ connect کال کرنے کے بعد، iOS ڈیوائس سے جڑنے کی کوشش کرتا ہے۔ کامیاب کنکشن کی تصدیق centralManager(_:didConnect:) کے ذریعے کی جاتی ہے، خرابی — centralManager(_:didFailToConnect:error:) کے ذریعے۔ کنکشن کے اختیارات میں بیک گراؤنڈ اطلاعات کے لیے CBConnectPeripheralOptionNotifyOnConnectionKey، CBConnectPeripheralOptionNotifyOnDisconnectionKey اور CBConnectPeripheralOptionNotifyOnNotificationKey شامل ہیں۔

swift
// BLE ڈیوائس سے کنیکٹ کریں
func connectToPeripheral(
    _ peripheral: CBPeripheral
) {
    centralManager.connect(peripheral, options: nil)

    // پیریفرل کے لیے ڈیلیگیٹ سیٹ کریں
    peripheral.delegate = self
}

// ڈیلیگیٹ: کامیاب کنکشن
func centralManager(
    _ central: CBCentralManager,
    didConnect peripheral: CBPeripheral
) {
    print("سے منسلک: " +
          "\(peripheral.name ?? "unknown")")

    // سروس کی دریافت شروع کریں
    peripheral.discoverServices(nil)
}

// ڈیلیگیٹ: کنکشن خرابی
func centralManager(
    _ central: CBCentralManager,
    didFailToConnect peripheral: CBPeripheral,
    error: Error?
) {
    print("Connection failed: 
          \(error?.localizedDescription ?? "")")
}

iOS پر کنکشن ٹائم آؤٹ 30 سیکنڈ ہے۔ اگر ڈیوائس نے اس وقت کے اندر کنکشن کی درخواست کا جواب نہیں دیا، تو didFailToConnect کال کیا جاتا ہے۔ ٹائم آؤٹ متاثر ہوتا ہے: ڈیوائس سے فاصلہ، مداخلت، اور ڈیوائس فی الحال اشتہار دے رہی ہے یا نہیں۔ کنیکٹ کرنے سے پہلے، یقینی بنائیں کہ ڈیوائس کنیکٹ ایبل اشتہاری موڈ (ADV_IND، ADV_NONCONN_IND نہیں) میں ہے۔

سروسز اور خصوصیات کی دریافت

کنکشن کے بعد، آپ کو پیریفرل کی سروسز (discoverServices) اور خصوصیات (discoverCharacteristics) دریافت کرنی ہوں گی۔ ڈیٹا پڑھنے یا لکھنے سے پہلے یہ ایک لازمی مرحلہ ہے۔ عمل غیر متوازن ہے: discoverServices peripheral(_:didDiscoverServices:) کے ذریعے نتائج لوٹاتا ہے، اور discoverCharacteristics — peripheral(_:didDiscoverCharacteristicsFor:error:) کے ذریعے۔

discoverServices میں nil کے بجائے متعلقہ UUIDs کی ایک صف بھیجنے کی سفارش کی جاتی ہے۔ فلٹرنگ دریافت کو تیز کرتی ہے اور توانائی بچاتی ہے۔ اگر کوئی سروس نہیں ملتی ہے، تو iOS ایک خالی صف کی اطلاع دے گا۔ خصوصیات دریافت کرنے کے بعد، آپ ان کی قدریں پڑھ سکتے ہیں (readValue)، اطلاعات کو سبسکرائب کر سکتے ہیں (setNotifyValue) یا ڈیٹا لکھ سکتے ہیں (writeValue)۔

ایک اہم نکتہ: MTU کنکشن کے بعد خود بخود طے پاتا ہے۔ موجودہ MTU حاصل کرنے کے لیے، peripheral.maximumWriteValueLength(for: .withResponse) یا .withoutResponse استعمال کریں۔ iOS پر، BLE 5.0 آلات کے لیے زیادہ سے زیادہ MTU 512 بائٹس ہے۔ اگر آپ کو MTU سے بڑا ڈیٹا منتقل کرنے کی ضرورت ہے، تو ایپلیکیشن کی سطح پر فریگمنٹیشن نافذ کریں۔

بیک گراؤنڈ اسکیننگ اور iOS حدود

iOS پر BLE آلات کی بیک گراؤنڈ اسکیننگ کے لیے خصوصی ترتیب کی ضرورت ہے۔ Core Bluetooth بیک گراؤنڈ ایگزیکیوشن کو سپورٹ کرتا ہے، لیکن اہم حدود کے ساتھ۔ بیک گراؤنڈ میں کام کرنے کے لیے، آپ کو ضرورت ہے: پروجیکٹ کی قابلیتوں میں Background Modes میں bluetooth-central کو فعال کریں، state restoration کے لیے CBCentralManagerOptionRestoreIdentifierKey آپشن کے ساتھ CBCentralManager شروع کریں اور بیک گراؤنڈ میں جانے پر مرکزی مینیجر کے واقعات کو ہینڈل کریں۔

iOS پر بیک گراؤنڈ BLE حدود: UUID فلٹرنگ کے بغیر scanForPeripherals بیک گراؤنڈ میں کام نہیں کرتا۔ ایپ کو اسکیننگ کے لیے مخصوص سروس UUIDs بتانے چاہئیں۔ iOS BLE واقعات کی ترسیل میں غیر معینہ مدت تک تاخیر کر سکتا ہے۔ Core Bluetooth خود بخود اسکیننگ دوبارہ شروع کرتا ہے جب کوئی مماثل ڈیوائس دریافت ہوتی ہے، چاہے ایپ بیک گراؤنڈ میں ہو۔ بیک گراؤنڈ اسکیننگ کا ٹائم آؤٹ: iOS توانائی بچانے کے لیے 10-30 منٹ کے بعد اسکیننگ روک سکتا ہے۔

State Restoration ایک Core Bluetooth میکانزم ہے جو ایپ کے دوبارہ شروع ہونے یا iOS ریبوٹ کے بعد BLE کنکشن بحال کرنے کی اجازت دیتا ہے۔ اسے استعمال کرنے کے لیے: ابتدا کے دوران CBCentralManagerOptionRestoreIdentifierKey بتائیں، ڈیلیگیٹ میں centralManager(_:willRestoreState:) نافذ کریں، اور منتقل کردہ لغت سے منسلک پیریفرلز کی فہرست بحال کریں۔ State Restoration بیک گراؤنڈ میں کام کرنے والی BLE ایپس کے لیے اہم فعالیت ہے، جیسے فٹنس ٹریکرز یا طبی آلات۔

خرابیوں کا انتظام اور کنکشن کی بحالی

CBCentralManager کئی منظرناموں میں خرابیاں پیدا کرتا ہے: کنکشن ناکام (didFailToConnect)، کنکشن منقطع (didDisconnectPeripheral)، خصوصیت پڑھنے/لکھنے کے لیے دستیاب نہیں (didWriteValue خرابی)۔ تمام Core Bluetooth خرابیاں CBErrorDomain ڈومین کے ساتھ Error آبجیکٹ کے ذریعے لوٹائی جاتی ہیں۔ سب سے عام کوڈز: CBErrorConnectionTimeout (0x04)، CBErrorPeripheralDisconnected (0x07)، CBErrorOperationNotSupported (0x0A)۔

کنکشن بحالی کی حکمت عملی: didDisconnectPeripheral موصول ہونے پر، خرابی کا کوڈ چیک کریں۔ اگر خرابی CBErrorConnectionTimeout یا CBErrorPeripheralDisconnected ہے — 1-5 سیکنڈ میں خودکار دوبارہ کنکشن طے کریں۔ اگر خرابی CBErrorOperationNotSupported ہے — اسے لاگ کریں اور آپریشن دوبارہ نہ آزمائیں۔ اہم کنکشنز (طبی آلات) کے لیے، زیادہ سے زیادہ 60 سیکنڈ کے وقفے کے ساتھ ایکسپونینشل بیک آف استعمال کریں۔

swift
// خودکار دوبارہ کنکشن کے ساتھ منقطع ہونے کو ہینڈل کریں
func centralManager(
    _ central: CBCentralManager,
    didDisconnectPeripheral peripheral: CBPeripheral,
    error: Error?
) {
    guard let error = error else {
        return // متوقع منقطع
    }

    print("Disconnected: \(error.localizedDescription)")

    // خودکار دوبارہ کنکشن
    if shouldAutoReconnect {
        DispatchQueue.main.asyncAfter(
            deadline: .now() + reconnectDelay
        ) {
            central.connect(peripheral)
        }
    }
}

iOS پر ایک مضبوط BLE ایپ تیار کرتے وقت، ذہن میں رکھیں: Core Bluetooth کمزور سگنل پر تمام پیکٹوں کی ترسیل کی ضمانت نہیں دیتا۔ قابل اعتماد ترسیل کے لیے، writeType .withResponse (تصدیق شدہ تحریر) استعمال کریں اور پیریفرل سے ڈیٹا حاصل کرنے کے لیے اطلاعات (setNotifyValue) کو سبسکرائب کریں۔ پروڈکشن میں کنکشن کے مسائل کی تشخیص کے لیے خرابی کا لاگ رکھیں۔

اکثر پوچھے گئے سوالات

CBCentralManager آلات کیوں دریافت نہیں کرتا؟

centralManagerDidUpdateState کے ذریعے مینیجر کی حالت چیک کریں۔ یقینی بنائیں کہ Info.plist میں NSBluetoothAlwaysUsageDescription اجازت موجود ہے، ڈیوائس پر بلوٹوتھ فعال ہے اور پیریفرل ڈیوائس صحیح قسم (کنیکٹ ایبل اشتہار، نان کنیکٹ ایبل نہیں) کے ساتھ اشتہار دے رہی ہے۔

ایک ساتھ کتنے BLE آلات iOS سے منسلک ہو سکتے ہیں؟

BLE 5.0 والے آلات (iPhone 8 اور نئے) پر — 7 بیک وقت کنکشنز تک۔ پرانے آلات پر — 3-5 تک۔ اسکین کیے گئے آلات کی تعداد لامحدود ہے، لیکن فعال کنکشنز کی Bluetooth کنٹرولر کے ذریعے ایک سخت حد مقرر ہے۔

بیٹری ختم کیے بغیر میں iOS پر BLE کو کتنی بار اسکین کر سکتا ہوں؟

UUID فلٹرنگ کے ساتھ اسکین کرنے اور ڈیوائس ملنے پر اسکیننگ بند کرنے کی سفارش کی جاتی ہے۔ مسلسل اسکیننگ بیٹری ختم کرتی ہے: 1 گھنٹہ مسلسل اسکیننگ iPhone کی ~10-15% چارج استعمال کرتی ہے۔ اسکیننگ بند کرنے کے لیے ٹائمر اور شرائط استعمال کریں۔

CBCentralManager اور CBPeripheralManager میں کیا فرق ہے؟

CBCentralManager بیرونی BLE آلات (Central کردار) کو اسکین اور کنیکٹ کرنے کے لیے ہے۔ CBPeripheralManager آپ کے iOS ڈیوائس کو BLE پیریفرل کے طور پر کام کرنے (سروسز کا اشتہار دینے) کے لیے ہے۔ ایک مثال صرف ایک کردار میں ہو سکتی ہے۔

BLE ڈیوائس سے کنکشن کے نقصان کو کیسے ہینڈل کریں؟

centralManager(_:didDisconnectPeripheral:error:) نافذ کریں۔ اگر خرابی nil نہیں ہے — ایکسپونینشل بیک آف (1 سیکنڈ → 2 سیکنڈ → 4 سیکنڈ → 8 سیکنڈ → زیادہ سے زیادہ 60 سیکنڈ) کے ساتھ خودکار دوبارہ کنکشن طے کریں۔ اگر خرابی nil ہے — ڈیوائس عام طور پر منقطع ہوئی (مثال کے طور پر، صارف نے ڈیوائس پر بٹن دبایا)۔

خلاصہ

  • CBCentralManager iOS پر Central کردار میں BLE اسکیننگ، کنکشنز اور ڈیٹا کی منتقلی کے انتظام کے لیے اہم Core Bluetooth کلاس ہے۔
  • اسکیننگ scanForPeripherals کے ذریعے بجلی کی کھپت کو کم کرنے کے لیے اختیاری سروس UUID فلٹرنگ کے ساتھ شروع کی جاتی ہے۔
  • کنکشن connect کے ذریعے کیا جاتا ہے، کامیابی didConnect سے، خرابی 30 سیکنڈ ٹائم آؤٹ کے ساتھ didFailToConnect سے تصدیق شدہ ہے۔
  • کنکشن کے بعد، discoverServices اور discoverCharacteristics کے ذریعے سروسز اور خصوصیات دریافت کرنی ہوں گی۔
  • بیک گراؤنڈ اسکیننگ کے لیے bluetooth-central Background Mode ضروری ہے اور حدود (UUID فلٹرنگ، ممکنہ تاخیر) کے ساتھ سپورٹ کیا جاتا ہے۔
  • iOS BLE 5.0 آلات پر 7 بیک وقت BLE کنکشنز تک سپورٹ کرتا ہے، دوبارہ شروع ہونے کے بعد بحالی کے لیے state restoration۔
  • خرابیوں کا انتظام اور ایکسپونینشل بیک آف کے ساتھ خودکار دوبارہ کنکشن iOS پر قابل اعتماد BLE ایپ کی بنیاد ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں