When terminated the app the connection is still restored but when the device lose connection it can't reconnect again
class BluetoothManager {
//MARK: - Singelton
static let shared = BluetoothManager()
//MARK: - Propertise
var centralManager: CentralManager!
//MARK: - Configure Central Manager
func configureCentralManager() {
// let options = [CBCentralManagerOptionRestoreIdentifierKey: "NOUR", CBCentralManagerOptionShowPowerAlertKey: true] as [String: AnyObject]
centralManager = CentralManager(
options: [CBCentralManagerOptionRestoreIdentifierKey: NSString("NOUR")],
onWillRestoreCentralManagerState: { (restoreState) in
print("RESTORED")
print(restoreState.centralManager )
})
}
//MARK: - Start Scanning For Peripherals
func startScanningForPeripherals() {
_ = centralManager.observeState()
.startWith( centralManager.state )
.filter { $0 == .poweredOn }
.flatMap { _ in self.centralManager.scanForPeripherals(withServices: [self.beaconServiceCBUUID]) }
.subscribe(onNext: { [weak self] scannedPeripheral in
guard let self = self else { return }
self.configureScannedPeripherals(scannedPeripheral: scannedPeripheral)
}, onError: { [weak self] error in
guard let self = self else { return }
print("\(error)")
})
}
//MARK: - Connect To Peripheral Devices
func connectToPeripheralDevices(peripheral: Peripheral) {
peripheral.establishConnection()
.flatMap { $0.discoverServices(nil) }.asObservable()
.flatMap { Observable.from($0) }
.flatMap { $0.discoverCharacteristics(nil)}.asObservable()
.flatMap { Observable.from($0) }
.filter({ $0.properties.contains(.read) })
.flatMap { $0.readValue() }
.subscribe(onNext: {
let data = $0.value
}, onError: { error in
print(error)
}).disposed(by: disposeBag)
}
}
// In App Delegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
BluetoothManager.shared.configureCentralManager()
}
When terminated the app the connection is still restored but when the device lose connection it can't reconnect again
class BluetoothManager {
//MARK: - Singelton
static let shared = BluetoothManager()
//MARK: - Propertise
var centralManager: CentralManager!
}
// In App Delegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
BluetoothManager.shared.configureCentralManager()
}