Как автоматически подключиться к CBPeripheral (устройство BLE с iBeacon + Bluetooth Chip) и приложение не работает

У меня есть одно аппаратное устройство для разблокировки Smart Door, которое одновременно действует как iBeacon и CoreBluetooth Peripheral!

Мое требование: когда мое приложение запускается в первый раз, приложение начнет мониторинг региона iBeacon, а когда расстояние до пользователя меньше 10 метров, приложение должно начать сканирование периферийного устройства BLE с использованием определенной службы CBService.

Когда пользователь подходит на расстояние 0,5 метра, приложение должно автоматически подключиться к отсканированному периферийному устройству CBP и обработать операцию открытия двери.

Вы можете себе представить это, поскольку приложение активируется, когда вы приближаетесь (примерно в 10 метрах) от входа в здание и начинаете сканирование ближайшего Bluetooth H / w. Когда вы подойдете ко входу, дверь откроется автоматически при выполнении операции Bluetooth.

Может ли кто-нибудь помочь мне в том, как добиться аналогичного поведения с помощью технологии CoreBluetooth?

Это приложение также должно работать в фоновом режиме.

То, что я сделал до сих пор, это запустил мониторинг региона iBeacon и получил обратный вызов в

func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
        // I am using beacon's accuracy as distance calculation.
        // When accuracy is < 10 meter, I am starting Peripheral scanning using: centralManager.scanForPeripherals(withServices: [{My Custom Service UUID}], options: [CBCentralManagerScanOptionAllowDuplicatesKey: false])
}

Мой менеджер Bluetooth получает обратный звонок о

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
}

Теперь, как я могу сопоставить с моим iBeacon и обнаруженным периферийным устройством и установить автоматическое соединение с периферийным устройством, когда расстояние составляет ‹0,5 метра.

Короче говоря, мой мобильный телефон должен работать как RFID-карта для управления аутентификацией и посещаемостью.

Я хочу добиться такого же поведения, как показано в следующем видео: https://www.youtube.com/watch?v=Y6XlVE7UKp0


person iCoder    schedule 15.01.2021    source источник
comment
Вероятно, вам действительно не нужна функциональность iBeacon. Просто уменьшите мощность передачи чипа Bluetooth в замке, чтобы он обнаруживался только тогда, когда вы находитесь на расстоянии 0,5 м от него.   -  person Paulw11    schedule 15.01.2021
comment
@ Paulw11 Но без функциональности iBeacon будет ли мое приложение активировано, если я его не использую или пользователь / ОС его убил. Мне нужно руководство о том, как справиться с этим сценарием iBeacon + BLE   -  person iCoder    schedule 15.01.2021
comment
Вы можете использовать фоновый режим CoreBluetooth и восстановление состояния. Если у вас есть ожидающий connect для периферийного устройства, то iOS либо доставит событие подключения в фоновом режиме (если ваше приложение приостановлено), либо запустит его в фоновом режиме, а затем доставит событие подключения (если ваше приложение было прервано iOS). Если приложение завершено пользователем, оно не будет перезапущено, но это выбор пользователя для завершения вашего приложения, и им не следует ожидать, что оно будет работать, если они его завершили.   -  person Paulw11    schedule 15.01.2021
comment
Даже если вы используете iBeacon, вам понадобится ожидающее соединение Core Bluetooth, поскольку нет связи между iBeacon и периферийным устройством CoreBluetooth. Использование iBeacon также означает, что вам нужно будет всегда запрашивать (и получать) разрешение на определение местоположения.   -  person Paulw11    schedule 15.01.2021
comment
@ Paulw11 Это правда, что он может работать в фоновом режиме, если есть ожидающий вызов подключения. Однако у меня будет несколько устройств (например, несколько дверей), которые можно будет открывать, когда я рядом. Этот случай может не быть обработан при наличии нескольких периферийных устройств. Вот почему нам пришлось добавить чип iBeacon. Когда пользователь находится в пределах досягаемости этого чипа, приложение активируется, выполняет поиск ближайшего периферийного устройства BLE ›Создает соединение› Выполняет операцию BLE ›В последнем случае разрывает соединение.   -  person iCoder    schedule 15.01.2021
comment
У вас может быть несколько ожидающих подключений. Если вы действительно хотите использовать iBeacon, вам потребуется, чтобы ваше приложение сохраняло запись идентификатора периферийного устройства, соответствующего данному iBeacon, и использовало retrievePeripheralsWithIdentifier, чтобы получить CBPeripheral в connect, поскольку каждое устройство iOS будет видеть разные identifier для данного периферийный   -  person Paulw11    schedule 15.01.2021


Ответы (1)


Если у вас есть iBeacon, и на основе уникального значения Major / Minor вы ищете периферийное устройство BLE, тогда у вас будет сканироваться только одно периферийное устройство. Таким образом, iBeacon и периферийное устройство BLE будут согласованы.

Вы можете управлять массивом обнаруженных периферийных устройств и устанавливать соединение, когда делегат iBeacon didRangeBeacon отвечает на расстояние как 0,5 метра (значение Beacon Accuracy выражается в метрах. Вы также можете использовать это)

person iLoveIOS    schedule 16.01.2021