Я делаю приложение, которое использует круглые области для геозон. Когда телефон активен или приложение открыто, уведомления о геозонах работают нормально как в симуляторе, так и на устройстве (iPhone 6 под управлением 10.3.1).
В симуляторе работает нормально; Когда пользователь входит в регион, он просыпается, издает звук и показывает предупреждение на экране блокировки.
На телефоне звонки делегата "didEnterRegion" происходят при въезде в регион (логирую некоторые сообщения) но телефон не выдает оповещение и не просыпается. Когда я нажимаю кнопку «Домой» один раз, я вижу оповещение на экране блокировки, но я хочу, чтобы оно просыпалось и отображало оповещение мгновенно — например, когда я получаю сообщение. В симуляторе работает, поэтому интересно, что может быть не так? У меня это сработало несколько раз, когда оповещение показывалось как на телефоне, так и на моих часах, но в 95% случаев оно не работает — уведомления генерируются, но видны только в том случае, если я вручную разбудил телефон.
Как это исправить?
Вот код, который я использую для создания локального уведомления:
// https://blog.codecentric.de/en/2016/11/setup-ios-10-local-notification/
let location = CLLocation(latitude: item.coordinate.latitude, longitude: item.coordinate.longitude)
GeoTools.decodePosition(location: location) {
(address, city) in
let content = UNMutableNotificationContent()
content.title = "Camera nearby!"
content.subtitle = item.id
content.body = "\(address), \(city)"
content.categoryIdentifier = Constants.notificationCategoryId
content.sound = UNNotificationSound.default()
content.threadIdentifier = item.id
// FIXME make action for clicking notification
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0.001, repeats: false) // FIXME HACK
let request = UNNotificationRequest(identifier: "camNotification", content: content, trigger: trigger)
let unc = UNUserNotificationCenter.current()
unc.removeAllPendingNotificationRequests()
unc.add(request, withCompletionHandler: { (error) in
if let error = error {
print(error)
}
else {
print("completed")
}
})
}