iOS Doorkeeper CBPeripheralManager рекламный успех, но центральное устройство не может отсканировать его - PullRequest
0 голосов
/ 25 апреля 2020

Это касается использования рекламы через 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
        }
    }
}

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...