0

我刚刚对 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 连接在我的设备上运行我的应用程序时,它可以工作,但只有当应用程序处于后台时,它才会在以下情况下工作:

  • 我杀了应用程序

  • 显示应用程序时

4

2 回答 2

0

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

关于显示应用程序时的通知与用户点击通知与用户手动启动应用程序而忽略通知,这些都以不同的方式传达给应用程序。请参阅文档的响应通知和事件部分。或查看iOS 应用程序编程指南:后台执行以获取有关后台操作的一般信息。UIApplicationDelegate

于 2017-01-16T10:24:15.300 回答
-1

您的代码中有几个错误: 1. 缺少通知标题。您已将主体和声音添加到内容中,但缺少标题。标题是必须的,如果您不添加标题,通知将不会显示。

content.title = "Some Title"

  1. 不要init用于初始化。这些函数可以重写为:

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)

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

  1. 标识符值相同。对于您安排的每个通知,标识符值都需要不同。不显示具有相同标识符的通知。

let request = UNNotificationRequest(identifier: some_value, content: content, trigger: trigger)

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

希望这可以帮助。

于 2017-02-02T13:44:14.107 回答