Я уже некоторое время пытаюсь поиграть с маяками BLE и столкнулся с некоторыми запутанными проблемами.
Чего я хочу достичь:
- Сканирование рядомbeacons
- Выбор маяков для сохранения
- Мониторинг, когда выбранные маяки находятся в / вне диапазона.
Вот код, который я использую для сканирования ближайших маяков:
public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if(peripheral.name != nil && peripheral.name!.contains("MkiBeacon")){
print("\n Beacon : \(String(describing: peripheral.name)) \(peripheral.identifier)
\(peripheral.major):\(peripheral.minor)
\(peripheral.beaconName) \(peripheral.beaconUUID) \(peripheral.deviceID) ")
}
}
Здесь я получаю только периферийные данные name
и identifier
, все остальные значения, такие как major,minor,UUID
, не определены.
После этого я пытаюсь использовать identifier
для мониторинга событий региона маяка:
locationManager = CLLocationManager()
locationManager?.delegate = self
locationManager?.requestAlwaysAuthorization()
let uuid = UUID(uuidString: peripheral.identifier)
let major:CLBeaconMajorValue = 0
let minor:CLBeaconMinorValue = 491
let identifier = "myBeacon"
let region = CLBeaconRegion(proximityUUID: uuid!, major:major,minor:minor,identifier: identifier)
region.notifyOnEntry = true
region.notifyEntryStateOnDisplay = true
region.notifyOnExit = true
locationManager?.startRangingBeacons(in: region)
locationManager?.startMonitoring(for: region)
Кажется, что peripheral.identifier
не является правильным значением, в котором оно нуждается, поскольку оно не работает. Это работает, когда я добавляю UUID из другого приложения сканирования маяков, которое я использую для проверки своих маяков.