Je crée une application qui utilise des régions circulaires pour les géofences. Lorsque le téléphone est actif ou que l'application est ouverte, les notifications geofence fonctionnent correctement à la fois sur le simulateur et sur l'appareil (iPhone 6 10.3.1).Les alertes Geofence/les notifications locales ne réveillent pas le téléphone verrouillé lorsqu'il est déclenché
Dans le simulateur, cela fonctionne très bien; Lorsque l'utilisateur entre dans une région, il se réveille, émet un son et affiche une alerte sur l'écran de verrouillage. Sur le téléphone, les appels de délégué "didEnterRegion" sont effectués lors de la saisie de la région (j'enregistre certains messages) mais le téléphone ne fait pas d'alerte et se réveille. Lorsque j'appuie sur le bouton d'accueil une fois, je peux voir l'alerte sur l'écran de verrouillage, mais je veux qu'il se réveille et affiche l'alerte instantanément - comme quand je reçois un message. Cela fonctionne dans le simulateur, donc je me demande ce qui pourrait être faux? Il a fonctionné pour moi plusieurs fois, où l'alerte a été montrée sur le téléphone et ma montre, mais 95% du temps cela ne fonctionne pas - les notifications sont générées mais seulement visibles si je réveille manuellement le téléphone.
Comment résoudre ce problème?
Voici le code que j'utilise pour créer la notification locale:
// 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")
}
})
}