0

我启动我的应用程序并安排我的本地通知。这是我正在使用的代码的简化版本:

let content = UNMutableNotificationContent()
content.body = "Wild IBEACON appeared!"
let region = CLBeaconRegion(proximityUUID: uuid, identifier: "iBeacon region")
let trigger = UNLocationNotificationTrigger(region: region, repeats: true)
let request = UNNotificationRequest(identifier: "iBeacon notification", content: content, trigger: trigger)
notificationCenter.add(request)

它们在我的应用程序在后台时触发。到现在为止还挺好。

然后我重新启动设备。我不会强制退出应用程序。
现在通知不再触发。我需要再次打开应用程序。

有没有办法让我的日程安排在重启后幸存下来?

4

1 回答 1

1

UNLocationNotificationTrigger是 iOS10 中添加的新辅助类,可以更轻松地触发基于信标或地理围栏检测的通知。 根据文档,它被设计为仅在应用程序正在使用时使用:

应用程序必须请求访问位置服务,并且必须具有使用时的权限才能使用此类。要请求使用位置服务的权限,请在调度任何基于位置的触发器之前调用 CLLocationManager 的 requestWhenInUseAuthorization() 方法。

https://developer.apple.com/reference/usernotifications/unlocationnotificationtrigger

基于以上权限,应用只有在使用时才会触发。 文档没有明确说明它不会在后台运行,因此您可以尝试使用requestAlwaysAuthorization()而不是请求始终位置权限requestWhenInUseAuthorization()(如果这样做,请确保在 plist 中放入正确的密钥),看看这是否有帮助.

另一种方法是不使用此帮助程序类,而是手动启动和信标监控,然后在获得区域条目回调时手动CoreLocation创建自己的:UILocalNotification

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
  if let region = region as? CLBeaconRegion {
    let notificationMessage = "Wild IBEACON appeared!"
    let notification = UILocalNotification()
    notification.alertBody = notificationMessage
    notification.alertAction = "OK"
    UIApplication.shared.presentLocalNotificationNow(notification)
  }
}

众所周知,上述方法适用于应用程序重新启动。

于 2017-01-17T15:41:27.703 回答