#ios #swift #ios10
#iOS #swift #ios10
Вопрос:
Я хочу уведомить пользователя, когда он / она достиг определенного этажа, используя маяки оценки. Для выполнения моей задачи я разработал свой код, как показано ниже:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
self.beaconManager.delegate = self
self.beaconManager.requestAlwaysAuthorization()
let firstFloorRegion = CLBeaconRegion(
proximityUUID: uuid,
major: 2, identifier: "")
firstFloorRegion.notifyOnEntry = true
firstFloorRegion.notifyOnExit = true
firstFloorRegion.notifyEntryStateOnDisplay = true
self.beaconManager.startMonitoring(for: firstFloorRegion)
self.beaconManager.requestState(for: firstFloorRegion)
return true
}
func beaconManager(manager: AnyObject, didDetermineState region: CLBeaconRegion) {
NSLog("didDetermineState Called")
}
private func beaconManager(manager: AnyObject, didEnterRegion region: CLBeaconRegion) {
NSLog("DidEnterRegion Called")
}
private func beaconManager(manager: AnyObject, didExitRegion region: CLBeaconRegion) {
NSLog("didExitRegion Called")
}
в течение нескольких дней он работал отлично. Но начиная с последних 2 дней и далее, он показывает ошибку в консоли xcode следующим образом:
[Клиент] {«Сообщение»: «Забор: onClientEventRegionState, недопустимое состояние», «regionState»:»0″}.
Я не могу понять, что это значит. Я также не нашел никакого решения в Интернете. Помогите мне выбраться из этого.
Ответ №1:
Я заметил, что мониторинг iBeacon (и мониторинг региона в целом) занимает до 10 минут для работы после перезагрузки телефона. Конечно же, я перезапустил свой телефон и получил вашу ошибку в выводе консоли при вызове
manager.requestState(for: myRegion)
Я никогда не видел, чтобы Apple говорила о каких-либо негативных последствиях вызова
manager.startMonitoring(for: myRegion)
в уже зарегистрированном регионе. Однако я не вызываю это при каждом запуске приложения. Вместо этого я проверяю контролируемые регионы следующим образом:
for monitoredRegion in self.locationManager.monitoredRegions as! Set<CLBeaconRegion> {
print("Monitoring: " monitoredRegion.proximityUUID.uuidString " " monitoredRegion.identifier)
self.locationManager.requestState(for: monitoredRegion)
switch monitoredRegion.proximityUUID.uuidString {
case myRegionUUID.uuidString:
needToMonitorMyRegion = false
default:
break
}
}
Я не получаю сообщение об ошибке, когда я подтверждаю регистрацию таким образом. Я получаю сообщение об ошибке только при перезагрузке телефона.