Core Bluetooth হলো iOS, iPadOS এবং macOS-এ Bluetooth Low Energy-এর সাথে ইন্টারঅ্যাক্ট করার জন্য Apple-এর ফ্রেমওয়ার্ক। ফ্রেমওয়ার্কটি BLE-এর উভয় ভূমিকায় কাজ করার জন্য API-এর একটি সম্পূর্ণ সেট সরবরাহ করে: কেন্দ্রীয় ডিভাইস (CBCentralManager) স্ক্যানিং এবং পেরিফেরালের সাথে সংযোগের জন্য, এবং পেরিফেরাল ডিভাইস (CBPeripheralManager) BLE সার্ভার অনুকরণের জন্য। Core Bluetooth BLE প্রোটোকল স্ট্যাককে ভৌত রেডিও থেকে অ্যাপ্লিকেশন-স্তরের GATT প্রোফাইল পর্যন্ত অ্যাবস্ট্র্যাক্ট করে। Apple Developer, 2026 অনুসারে, Core Bluetooth হলো BLE ডেভেলপমেন্টের জন্য একমাত্র অফিসিয়াল Apple API, যা BLE 4.0–5.4 সমর্থন করে এক্সটেন্ডেড অ্যাডভারটাইজিং, 2M PHY এবং LE Audio-সহ।
মূল বিষয়
Core Bluetooth BLE স্ট্যাককে Bluetooth SIG স্পেসিফিকেশন দ্বারা সংজ্ঞায়িত দুটি যৌক্তিক ভূমিকায় বিভক্ত করে। কেন্দ্রীয় ডিভাইসের ভূমিকা (Central) CBCentralManager ক্লাস দ্বারা উপস্থাপিত হয় — এটি স্ক্যানিং শুরু করে, সংযোগ স্থাপন করে এবং সংযুক্ত CBPeripheral-এর তালিকা পরিচালনা করে। পেরিফেরাল ডিভাইসের ভূমিকা (Peripheral) CBPeripheralManager দ্বারা উপস্থাপিত হয় — এটি পরিষেবা এবং বৈশিষ্ট্য প্রকাশ করে, কেন্দ্রীয় অনুরোধে সাড়া দেয় এবং বিজ্ঞপ্তি পাঠায়। একটি iOS সেশন বিভিন্ন BLE রেডিওতে একসাথে উভয় ভূমিকায় কাজ করতে পারে, তবে সাধারণ অ্যাপ্লিকেশন একটি ভূমিকা ব্যবহার করে।
Core Bluetooth আর্কিটেকচারে পাঁচটি মূল অ্যাবস্ট্র্যাকশন অন্তর্ভুক্ত। CBCentralManager ডিভাইসের Bluetooth অ্যাডাপ্টারের অবস্থা পরিচালনা করে: poweredOn (কাজের জন্য প্রস্তুত), poweredOff (Bluetooth নিষ্ক্রিয়), unauthorized (অনুমতি নেই), unsupported (BLE উপলব্ধ নয়)। CBPeripheral তার UUID, নাম, RSSI এবং GATT স্তরক্রম সহ একটি দূরবর্তী BLE ডিভাইস উপস্থাপন করে। CBService — বৈশিষ্ট্যগুলির একটি যৌক্তিক গ্রুপ। CBCharacteristic — পড়া/লেখা/বিজ্ঞপ্তির জন্য একটি ডেটা পয়েন্ট। CBPeripheralManager পেরিফেরাল অনুকরণের জন্য একটি স্থানীয় GATT সার্ভার তৈরি করে।
| ক্লাস | ভূমিকা | প্রধান পদ্ধতি |
|---|---|---|
| CBCentralManager | কেন্দ্রীয় ডিভাইস | scanForPeripherals, connect, cancelPeripheralConnection, retrievePeripherals |
| CBPeripheral | দূরবর্তী পেরিফেরাল | discoverServices, discoverCharacteristics, readValue, writeValue, setNotifyValue |
| CBPeripheralManager | স্থানীয় পেরিফেরাল | addService, removeService, startAdvertising, respondToRequest, updateValue |
| CBCentral | দূরবর্তী কেন্দ্রীয় | maximumUpdateValueLength, identifier, ancsAuthorized |
CBCentralManager-এর অবস্থা সমস্ত BLE অপারেশন নিয়ন্ত্রণ করে। অ্যাপ শুরু হলে, centralManagerDidUpdateState বর্তমান Bluetooth অবস্থার সাথে কল করা হয়। যদি অবস্থা .poweredOn না হয়, সিস্টেম যেকোনো BLE কল উপেক্ষা করে। ডেভেলপারকে প্রতিটি স্ক্যান এবং সংযোগের আগে অবস্থা পরীক্ষা করতে হবে। .poweredOff থেকে .poweredOn-এ রূপান্তর ঘটে যখন iOS সেটিংসে Bluetooth চালু করা হয় — ডেলিগেট একটি পুনরাবৃত্ত কল পায় এবং অ্যাপ স্ক্যানিং পুনরায় শুরু করতে পারে।
CBCentralManager কেন্দ্রীয় ডিভাইসের পক্ষ থেকে সমস্ত BLE অপারেশনের জন্য প্রবেশ বিন্দু। ইনিশিয়ালাইজেশন একটি ডেলিগেট (CBCentralManagerDelegate) এবং একটি DispatchQueue নেয় — Apple সরলতার জন্য প্রধান কিউ বা কর্মক্ষমতার জন্য সিরিয়াল কিউ ব্যবহার করার পরামর্শ দেয়। ইনিশিয়ালাইজেশনের পরে, ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে Bluetooth অবস্থা পরীক্ষা করে এবং centralManagerDidUpdateState: কল করে — পরিচালনা করার জন্য প্রথম বাধ্যতামূলক ডেলিগেট।
স্ক্যানিং scanForPeripheralsWithServices:options: পদ্ধতি দিয়ে শুরু হয়। প্রথম প্যারামিটারটি ফিল্টার করার জন্য CBUUID পরিষেবাগুলির একটি অ্যারে: যদি পছন্দসই পরিষেবাগুলির UUID জানা থাকে, সেগুলি পাস করলে পাওয়ার খরচ এবং অনুসন্ধানের সময় হ্রাস পায়। যদি nil হয়, পরিসরের সমস্ত BLE ডিভাইস আবিষ্কৃত হয়। অপশনগুলির মধ্যে রয়েছে .allowDuplicatesKey (একই ডিভাইসের পুনরাবৃত্ত আবিষ্কার) এবং .solicitedServiceUUIDsKey (কেন্দ্রীয়তে প্রকাশিত পরিষেবাগুলির জন্য)।
import CoreBluetooth
class BLECentral: NSObject {
private var centralManager: CBCentralManager!
private var discoveredPeripherals: [CBPeripheral] = []
override init() {
super.init()
centralManager = CBCentralManager(delegate: self, queue: .main)
}
// BLE স্ক্যানিং শুরু করুন
func startScan() {
guard centralManager.state == .poweredOn else {
print("Bluetooth উপলব্ধ নয়")
return
}
// সমস্ত ডিভাইস স্ক্যান করুন (nil = কোনো ফিল্টার নয়)
centralManager.scanForPeripherals(withServices: nil,
options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])
}
// স্ক্যানিং বন্ধ করুন
func stopScan() {
centralManager.stopScan()
}
// নির্বাচিত ডিভাইসে সংযোগ করুন
func connect(to peripheral: CBPeripheral) {
centralManager.connect(peripheral, options: nil)
}
}
// MARK: - CBCentralManagerDelegate
extension BLECentral: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
startScan()
}
}
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi: NSNumber) {
if !discoveredPeripherals.contains(where: { $0.identifier == peripheral.identifier }) {
discoveredPeripherals.append(peripheral)
print("Found devices: \(peripheral.name ?? "Unknown"), RSSI: \(rssi)")
}
}
func centralManager(_ central: CBCentralManager,
didConnect peripheral: CBPeripheral) {
print("Connected: \(peripheral.identifier)")
peripheral.delegate = self
peripheral.discoverServices(nil)
}
func centralManager(_ central: CBCentralManager,
didDisconnectPeripheral peripheral: CBPeripheral,
error: Error?) {
print("Disconnected: \(peripheral.identifier)")
}
}
BLECentral ক্লাস BLE ডিভাইস স্ক্যানিং এবং সংযোগের সম্পূর্ণ চক্র প্রদর্শন করে। centralManagerDidUpdateState Bluetooth সক্রিয় থাকলে স্ক্যানিং শুরু করে। didDiscoverPeripheral identifier দ্বারা ডিডুপ্লিকেশন সহ discoveredPeripherals অ্যারেতে পাওয়া ডিভাইস সংগ্রহ করে। সংযোগের (didConnect) পরে, পরিষেবা আবিষ্কার অবিলম্বে শুরু হয় — এটি যেকোনো GATT অপারেশনের আগে একটি বাধ্যতামূলক পদক্ষেপ।
CBPeripheralManager হলো iOS-এ BLE পেরিফেরাল ডিভাইস অনুকরণের ক্লাস। পেরিফেরাল ভূমিকায় একটি অ্যাপ তার পরিষেবা এবং বৈশিষ্ট্য প্রকাশ করতে পারে, কেন্দ্রীয় ডিভাইস থেকে আগত পড়া/লেখার অনুরোধ গ্রহণ করতে পারে এবং বিজ্ঞপ্তি পাঠাতে পারে। CBPeripheralManager iPhone দ্বারা অনুকরণ করা BLE আনুষাঙ্গিকগুলির জন্য ব্যবহৃত হয়: রিমোট, কীবোর্ড, ট্র্যাকার, IoT গেটওয়ে।
CBPeripheralManager-এর জীবনচক্র ইনিশিয়ালাইজেশন এবং CBPeripheralManagerDelegate দিয়ে শুরু হয়। peripheralManagerDidUpdateState: এর মাধ্যমে poweredOn নিশ্চিতকরণ পাওয়ার পরে, পরিষেবা প্রকাশিত হয় (addService:) এবং বিজ্ঞাপন শুরু হয় (startAdvertising:)। বিজ্ঞাপন ডেটা CBAdvertisementData-তে স্থানীয় নাম (CBAdvertisementDataLocalNameKey), পরিষেবা UUID (CBAdvertisementDataServiceUUIDsKey), এবং ট্রান্সমিট পাওয়ার লেভেল (CBAdvertisementDataTxPowerLevelKey) অন্তর্ভুক্ত থাকে। সর্বাধিক বিজ্ঞাপন প্যাকেট আকার BLE 4.0-এর জন্য 31 বাইট, এক্সটেন্ডেড অ্যাডভারটাইজিং BLE 5.0+-এর জন্য 251 বাইট।
// CBPeripheralManager এর মাধ্যমে iOS-এ BLE পেরিফেরাল
class BLEPeripheral: NSObject {
private var peripheralManager: CBPeripheralManager!
let serviceUUID = CBUUID(string: "1234")
let characteristicUUID = CBUUID(string: "5678")
override init() {
super.init()
peripheralManager = CBPeripheralManager(delegate: self, queue: .main)
}
// বৈশিষ্ট্য সহ পরিষেবা প্রকাশ করুন
func setupService() {
let characteristic = CBMutableCharacteristic(
type: characteristicUUID,
properties: [.read, .write, .notify],
value: nil,
permissions: [.readable, .writeable]
)
let service = CBMutableService(type: serviceUUID, primary: true)
service.characteristics = [characteristic]
peripheralManager.add(service)
}
// বিজ্ঞাপন শুরু করুন
func startAdvertising() {
let advertisementData: [String: Any] = [
CBAdvertisementDataLocalNameKey: "My BLE Device",
CBAdvertisementDataServiceUUIDsKey: [serviceUUID]
]
peripheralManager.startAdvertising(advertisementData)
}
}
// MARK: - CBPeripheralManagerDelegate
extension BLEPeripheral: CBPeripheralManagerDelegate {
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
if peripheral.state == .poweredOn {
setupService()
}
}
func peripheralManager(_ peripheral: CBPeripheralManager,
didAdd service: CBService,
error: Error?) {
if error == nil {
startAdvertising()
}
}
// পড়ার অনুরোধ পরিচালনা করুন
func peripheralManager(_ peripheral: CBPeripheralManager,
didReceiveRead request: CBATTRequest) {
let data = "CurrentValue".data(using: .utf8)!
request.value = data
peripheralManager.respond(to: request, withResult: .success)
}
// লেখার অনুরোধ পরিচালনা করুন
func peripheralManager(_ peripheral: CBPeripheralManager,
didReceiveWrite requests: [CBATTRequest]) {
for request in requests {
if let value = request.value {
print("Write: \(value)")
}
}
peripheralManager.respond(to: requests.first!, withResult: .success)
}
}
BLEPeripheral ক্লাস একটি একক বৈশিষ্ট্য সহ একটি BLE সার্ভার তৈরি করে যা পড়া, লেখা এবং বিজ্ঞপ্তি সমর্থন করে। ইনিশিয়ালাইজেশনের পরে, peripheralManagerDidUpdateState addService: এর মাধ্যমে পরিষেবা প্রকাশ করে, তারপর startAdvertising: এর মাধ্যমে বিজ্ঞাপন শুরু করে। didReceiveRead এবং didReceiveWrite হ্যান্ডলার কেন্দ্রীয় ডিভাইস থেকে আগত GATT অনুরোধে সাড়া দেয়। বিজ্ঞপ্তি পাঠানোর জন্য updateValue:forCharacteristic:onSubscribedCentrals: পদ্ধতি ব্যবহার করা হয়।
GATT অপারেশন (Generic Attribute Profile) Core Bluetooth-এ ডেটা বিনিময়ের ভিত্তি। পরিষেবা এবং বৈশিষ্ট্য আবিষ্কারের পরে, কেন্দ্রীয় ডিভাইস তিন ধরনের অপারেশন করতে পারে: একটি বৈশিষ্ট্যের মান পড়া, একটি মান লেখা এবং বিজ্ঞপ্তি/ইঙ্গিত সাবস্ক্রাইব করা। প্রতিটি অপারেশন অ্যাসিঙ্ক্রোনাস এবং সংশ্লিষ্ট CBPeripheralDelegate কলব্যাকের মাধ্যমে ফলাফল ফেরত দেয়।
পড়া: readValueForCharacteristic: কল করে করা হয়। মান peripheral:didUpdateValueForCharacteristic:error:-এ আসে। গুরুত্বপূর্ণ: পড়া ডিভাইস থেকে বর্তমান মান ফেরত দেয়, ক্যাশে করা নয়। যদি ডিভাইস পড়া সমর্থন না করে (.read প্রপার্টি), কলটি একটি ত্রুটি ফেরত দেবে। বড় মানের (MTU-র চেয়ে বড়) জন্য, BLE স্বয়ংক্রিয়ভাবে GATT স্তরে ডেটা খণ্ডিত এবং পুনরায় একত্রিত করে।
লেখা: writeValue:forCharacteristic:type: কল করে করা হয়। BLE দুটি লেখার মডেল সমর্থন করে: withResponse (নির্ভরযোগ্য, নিশ্চিতকরণ সহ) এবং withoutResponse (দ্রুত, নিশ্চিতকরণ ছাড়া)। CBCharacteristic.properties প্রপার্টি উপলব্ধ লেখার প্রকারগুলি সংজ্ঞায়িত করে। একটি একক লেখার প্যাকেটের সর্বাধিক আকার MTU দ্বারা সীমাবদ্ধ: BLE 4.0-এর জন্য 23 বাইট (20 বাইট পেলোড + 3 বাইট হেডার), এক্সটেন্ডেড MTU (MTU 251) সহ BLE 5.0-এর জন্য 247 বাইট পর্যন্ত।
বিজ্ঞপ্তি: setNotifyValue:true forCharacteristic: কল করে সক্রিয় করা হয়। সাবস্ক্রিপশনের পরে, পেরিফেরাল স্বয়ংক্রিয়ভাবে peripheral:didUpdateValueForCharacteristic: এর মাধ্যমে আপডেট পাঠায় যখনই বৈশিষ্ট্যের মান পরিবর্তন হয়। বিজ্ঞপ্তি নিষ্ক্রিয় করতে, setNotifyValue:false forCharacteristic: কল করা হয়। Core Bluetooth স্বয়ংক্রিয়ভাবে পেরিফেরালে CCCD বর্ণনাকারী পরিচালনা করে।
| অপারেশন | পদ্ধতি | ডেলিগেট | স্থানান্তরের ধরন |
|---|---|---|---|
| পড়া | readValueForCharacteristic: | didUpdateValueForCharacteristic | পোলিং (অনুরোধ-প্রতিক্রিয়া) |
| withResponse লেখা | writeValue:forCharacteristic:type:withResponse | didWriteValueForCharacteristic | নিশ্চিতকরণ সহ |
| withoutResponse লেখা | writeValue:forCharacteristic:type:withoutResponse | কোনো ডেলিগেট নেই | নিশ্চিতকরণ ছাড়া |
| বিজ্ঞপ্তি | setNotifyValue:true forCharacteristic: | didUpdateNotificationStateForCharacteristic + didUpdateValueForCharacteristic | পেরিফেরাল থেকে পুশ |
পটভূমি মোড Core Bluetooth-এ BLE অ্যাপগুলিকে পটভূমিতে থাকাকালীন স্ক্যানিং চালিয়ে যেতে, সংযোগ বজায় রাখতে এবং বিজ্ঞপ্তি পেতে অনুমতি দেয়। এটি সক্রিয় করতে, Xcode-এ “Uses Bluetooth LE accessories” ক্ষমতা সক্ষম করুন (Info.plist → Required background modes → App communicates using Core Bluetooth) এবং UIBackgroundModes-এ “bluetooth-central” কী যোগ করুন। পেরিফেরাল ভূমিকার জন্য — “bluetooth-peripheral”।
State Restoration iOS দ্বারা অ্যাপ পুনরারম্ভের পরে BLE সংযোগের অবস্থা পুনরুদ্ধার করার জন্য Core Bluetooth-এর একটি প্রক্রিয়া। যখন পটভূমি মোড সক্রিয় থাকে এবং CBCentralManager বা CBPeripheralManager ইনিশিয়ালাইজেশনে restoreIdentifier নির্দিষ্ট করা থাকে, iOS অ্যাপ শেষ হলে BLE স্ট্যাক অবস্থা সংরক্ষণ করে এবং পরবর্তী লঞ্চে এটি পুনরুদ্ধার করে। ডেলিগেট centralManager:willRestoreState: সংরক্ষিত CBPeripheral এবং অপেক্ষমাণ সংযোগ সহ একটি অভিধান পায়।
// State Restoration সহ Core Bluetooth কনফিগারেশন
class BLECentralWithRestoration: NSObject {
let restoreIdentifier = "com.app.blecentral"
private var centralManager: CBCentralManager!
override init() {
super.init()
let options: [String: Any] = [
CBCentralManagerOptionRestoreIdentifierKey: restoreIdentifier,
CBCentralManagerOptionShowPowerAlertKey: true
]
centralManager = CBCentralManager(delegate: self,
queue: nil,
options: options)
}
}
extension BLECentralWithRestoration: CBCentralManagerDelegate {
// পুনরারম্ভের পরে অবস্থা পুনরুদ্ধার করুন
func centralManager(_ central: CBCentralManager,
willRestoreState dict: [String : Any]) {
if let peripherals = dict[CBCentralManagerRestoredStatePeripheralsKey]
as? [CBPeripheral] {
for peripheral in peripherals {
peripheral.delegate = self
// GATT আবিষ্কার পুনরুদ্ধার করুন
peripheral.discoverServices(nil)
}
}
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
print("পুনরুদ্ধারের পরে Bluetooth প্রস্তুত")
}
}
}
BLECentralWithRestoration কনফিগারেশনে, CBCentralManagerOptionRestoreIdentifierKey কী অবস্থা সংরক্ষণ সক্ষম করে। যদি iOS দ্বারা অ্যাপটি শেষ করা হয় (যেমন, মেমরি চাপের কারণে), পরবর্তী লঞ্চে centralManager:willRestoreState: পূর্বে সংযুক্ত CBPeripheral-এর একটি তালিকা পায়। অ্যাপ ডেলিগেটগুলি পুনরুদ্ধার করে এবং পরিষেবা পুনঃআবিষ্কার সম্পাদন করে — ব্যবহারকারী সংযোগ বিচ্ছিন্নতা লক্ষ্য করে না। State Restoration ছাড়া, অ্যাপ শেষ হলে সমস্ত BLE সেশন হারিয়ে যায়।
একটি সম্পূর্ণ উদাহরণ Swift-এ BLE অ্যাপের যা একটি প্রকল্পে কেন্দ্রীয় এবং পেরিফেরাল উভয় ডিভাইসকে একত্রিত করে। অ্যাপ দুটি মোডে কাজ করতে পারে: BLE ডিভাইস আবিষ্কার এবং সংযোগ (কেন্দ্রীয়) বা BLE আনুষঙ্গিক অনুকরণ (পেরিফেরাল)। নীচে একটি সাধারণ BLE ম্যানেজার সহ একটি আর্কিটেকচার দেওয়া হল যা স্টার্টআপে ভূমিকা নির্বাচন করে।
// কেন্দ্রীয় এবং পেরিফেরালের জন্য ইউনিভার্সাল BLE ম্যানেজার
class BLEManager {
enum Role {
case central
case peripheral
}
private let role: Role
private var centralManager: CBCentralManager?
private var peripheralManager: CBPeripheralManager?
let advertisedServiceUUID = CBUUID(string: "A001")
init(role: Role) {
self.role = role
switch role {
case .central:
centralManager = CBCentralManager(delegate: nil, queue: .main)
case .peripheral:
peripheralManager = CBPeripheralManager(delegate: nil, queue: .main)
}
}
// কেন্দ্রীয় ডিভাইস: স্ক্যানিং
func scanForDevices() {
centralManager?.scanForPeripherals(withServices: nil, options: nil)
}
// পেরিফেরাল ডিভাইস: বিজ্ঞাপন
func advertiseService() {
let data: [String: Any] = [
CBAdvertisementDataServiceUUIDsKey: [advertisedServiceUUID]
]
peripheralManager?.startAdvertising(data)
}
}
// স্টার্টআপে ব্যবহার
let isCentral = UserDefaults.standard.bool(forKey: "isCentral")
let manager = BLEManager(role: isCentral ? .central : .peripheral)
if isCentral {
manager.scanForDevices()
} else {
manager.advertiseService()
}
BLEManager ইনিশিয়ালাইজেশনে ভূমিকা নির্বাচন করে এবং সংশ্লিষ্ট Manager (CBCentralManager বা CBPeripheralManager) তৈরি করে। ভূমিকা পতাকা UserDefaults-এ সংরক্ষণ বা কনফিগারেশন সার্ভারের মাধ্যমে পাস করা যেতে পারে। এই পদ্ধতি BLE অ্যাপকে ব্যবহারের ক্ষেত্রে খাপ খাইয়ে নিতে দেয়: বিক্রয় পয়েন্টে, iPhone পেমেন্ট টার্মিনাল স্ক্যান করার জন্য কেন্দ্রীয় হিসাবে কাজ করে; IoT গেটওয়েতে — সেন্সর থেকে ডেটা সংগ্রহ করার জন্য পেরিফেরাল হিসাবে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Core Bluetooth হলো iOS, iPadOS এবং macOS-এ BLE ডেভেলপমেন্টের জন্য Apple-এর ফ্রেমওয়ার্ক। এটি কেন্দ্রীয় (CBCentralManager) এবং পেরিফেরাল (CBPeripheralManager) উভয় ডিভাইসের জন্য API সরবরাহ করে। এটি BLE 4.0–5.4, এক্সটেন্ডেড অ্যাডভারটাইজিং, 2M PHY এবং LE Audio সমর্থন করে। Core Bluetooth হলো BLE যোগাযোগের জন্য একমাত্র অফিসিয়াল Apple API, যা Bluetooth Low Energy-এর সাথে কাজ করা সমস্ত iOS অ্যাপের জন্য প্রয়োজনীয়।
CBCentralManager কেন্দ্রীয় ডিভাইসের ভূমিকায় কাজ করার জন্য ক্লাস: এটি BLE পেরিফেরাল স্ক্যান করে, সংযোগ স্থাপন করে, বৈশিষ্ট্য পড়ে এবং লেখে। CBPeripheralManager পেরিফেরাল ভূমিকায় কাজ করার জন্য ক্লাস: এটি পরিষেবা প্রকাশ করে, পড়া/লেখার অনুরোধে সাড়া দেয় এবং বিজ্ঞপ্তি পাঠায়। একটি iPhone বিভিন্ন ম্যানেজার ইনস্ট্যান্সের মাধ্যমে একসাথে উভয় ভূমিকায় কাজ করতে পারে।
পটভূমি BLE অপারেশনের জন্য, Xcode-এ “Uses Bluetooth LE accessories” ক্ষমতা সক্ষম করুন এবং UIBackgroundModes-এ “bluetooth-central” কী যোগ করুন। পেরিফেরাল ভূমিকার জন্য — “bluetooth-peripheral”। State Restoration-এর জন্য ম্যানেজার ইনিশিয়ালাইজ করার সময় restoreIdentifier নির্দিষ্ট করুন। এই সেটিংস ছাড়া, পটভূমিতে অ্যাপ BLE ইভেন্ট পাবে না এবং সংযোগ হারাবে।
সাধারণ কারণ: CBCentralManager.state != .poweredOn (Bluetooth বন্ধ বা অনুমোদিত নয়), ডেলিগেট সেট করা নেই, ডিভাইস সীমার বাইরে বা বিজ্ঞাপন প্যাকেট পাঠাচ্ছে না। Info.plist-এ NSBluetoothAlwaysUsageDescription অনুমতি, centralManagerDidUpdateState-এ Bluetooth অবস্থা পরীক্ষা করুন এবং নিশ্চিত করুন যে scanForPeripherals শুধুমাত্র .poweredOn-এ কল করা হয়েছে।
হ্যাঁ, Core Bluetooth একসাথে একাধিক BLE ডিভাইসে সংযোগ সমর্থন করে। প্রতিটি CBPeripheral তার নিজস্ব ডেলিগেটের মাধ্যমে স্বাধীনভাবে পরিচালিত হয়। iOS সিস্টেম স্তরে একসাথে BLE সংযোগের সংখ্যা সীমিত করে (সাধারণত iPhone-এর জন্য 5–7)। 1:N পরিস্থিতির জন্য (যেমন, 10 ট্র্যাকার সহ একটি ফিটনেস সেন্টার), পেরিফেরালগুলিকে সারিবদ্ধ এবং চক্রাকারে পরিষেবা দেওয়া প্রয়োজন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন