当应用程序被杀死时,UNUserNotificationCenter不起作用

时间:2017-01-12 13:24:50

标签: swift unusernotificationcenter

我刚刚更改了我对iOs 10和其他人的通知:

if #available(iOS 10.0, *) {
    let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in

        let content = UNMutableNotificationContent()

        content.body = notifMessage!
        content.sound = UNNotificationSound.default()
        // Deliver the notification in five seconds.
        let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
        let request = UNNotificationRequest.init(identifier: "Upload", content: content, trigger: trigger)

        // Schedule the notification.
        let center = UNUserNotificationCenter.current()
        center.add(request)
    }
} else {
    let notification = UILocalNotification()
    notification.alertBody = notifMessage
    notification.fireDate = NSDate() as Date
    notification.soundName = UILocalNotificationDefaultSoundName
    UIApplication.shared.scheduleLocalNotification(notification)
}

当我在我的设备上运行我的应用程序时,通过将其连接到USB可以正常运行,但只有当应用程序处于后台时,它才会起作用:

  • 我杀了应用

  • 显示应用时

2 个答案:

答案 0 :(得分:0)

如果你杀了应用程序(通过双击主页按钮然后向上滑动),这不仅会终止应用程序,而且会禁止应用程序的进一步后台操作(直到用户再次启动它)。您只需按下主页按钮,即可通过正常的内存恢复过程将应用程序放弃。或者,出于测试目的,您可以以编程方式崩溃应用程序。但你不能使用跳板(主页按钮技巧的双击),因为影响应用程序的允许背景模式。

关于显示应用程序时的通知,如果用户点击通知,则用户手动启动应用程序忽略通知,这些都会以不同的方式传达给应用程序。请参阅UIApplicationDelegate documentation响应通知和事件部分。或者查看App Programming Guide for iOS: Background Execution以获取有关后台操作的一般信息。

答案 1 :(得分:0)

您的代码中有几个错误: 1.缺少通知的标题。您已将正文和声音添加到内容中,但标题丢失了。标题是必须的,如果您没有添加标题,通知将无法显示。

content.title = "Some Title"

  1. 请勿使用init进行初始化。这些功能可以重写为:
  2. let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)

    let request = UNNotificationRequest.init(identifier: "Upload", content: content, trigger: trigger)

    1. 标识符值相同。对于您安排的每个通知,标识符值必须不同。不会出现具有相同标识符的通知。
    2. let request = UNNotificationRequest(identifier: some_value, content: content, trigger: trigger)

      1. 触发时间。您在触发器中指定的时间为5秒。关闭应用程序并测试通知可能更少。为了安全起见,请确保此值至少为1分钟,以便您可以正确测试它是否正常工作。
      2. 希望这有帮助。