【问题标题】:Local Notifications After Device Restart设备重启后的本地通知
【发布时间】:2017-01-17 11:17:16
【问题描述】:

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

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)

当我的应用在后台时它们会触发。到目前为止,一切顺利。

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

有没有办法让我的日程安排在重启后仍然有效?

【问题讨论】:

  • 没办法
  • 通过重新启动设备,您将强制退出应用程序。一旦应用程序关闭,本地通知将不再起作用。对于这种情况,您需要使用推送通知。
  • 您忘记提及您的应用程序的哪个部分设置了通知;我假设您的应用没有在您的应用终止时设置本地通知 - 仅当它进入后台时。如果您能扩展您的 OP 并澄清这一点,那就太好了。
  • @holex 我通过UISwitch 运行该代码。
  • @dlbuckley 如何使用推送通知实现特定于位置的通知?

标签: ios ibeacon restart reboot usernotifications


【解决方案1】:

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

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

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

基于以上权限,应用只有在使用时才会触发。 文档没有明确说明它不会在后台运行,因此您可以尝试使用 requestAlwaysAuthorization() 而不是 requestWhenInUseAuthorization() 请求 always 位置权限(是如果你这样做,请确保你在你的 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)
  }
}

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

【讨论】:

  • WhenInUseAuthorization 就足够了,因为通知触发器不会启动应用程序。我的代码在 app 重启后已经可以工作,但在 device 重启后就不行了。在这种情况下,我的代码和你的代码都不起作用。
  • 终于可以了,但是不稳定。有时需要几分钟和一些蓝牙禁用周期才能触发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
相关资源
最近更新 更多