Это касается использования рекламы через Bluetooth.
Я начинаю рекламу, как этот код, на периферийном устройстве, но центральное устройство не может его сканировать. Я обещаю, что все аргументы настроены правильно.
func peripheralManager(_ peripheral: CBPeripheralManager, didAdd service: CBService, error: Error?) {
if let error = error {
let nsError = error as NSError
print(nsError.localizedFailureReason, nsError.localizedFailureReason, nsError.localizedRecoverySuggestion)
} else {
self.peripheralManager.startAdvertising([CBAdvertisementDataLocalNameKey: "test",
CBAdvertisementDataServiceUUIDsKey: [BLEConstant.serviceID]])
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
print(self.peripheralManager.isAdvertising)
}
}
}
Если я добавлю этот код, когда приложение активируется на моем периферийном устройстве, центральное устройство будет сканировать его, а затем я аннотирую этот код на периферийном устройстве, оно сохранит сканируйте в течение нескольких дней ,, но тогда центральное устройство не сможет сканировать его снова. Я не знаю почему. Это было проблемой в течение нескольких месяцев.
final class DoorkeeperCentralManager: NSObject {
static let shared = DoorkeeperCentralManager()
private var centralManager: CBCentralManager!
func startScanningOnlyTwoSeconds() {
centralManager = CBCentralManager(delegate: self, queue: nil)
}
}
extension DoorkeeperCentralManager: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .poweredOn:
if !central.isScanning {
central.scanForPeripherals(withServices: [BLEConstant.serviceID], options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
self.centralManager.stopScan()
}
}
default:
return
}
}
}
Есть идеи?