当应用程序运行时,本地通知不会弹出,但是当应用程序在后台时则会弹出

时间:2017-08-31 02:19:11

标签: ios swift notifications foreground

我已检查所有通知是否已在 NotificationCenter 中正确安排。而且,我的app委托中有completionHandler([.alert, .badge, .sound])代码,以确保即使用户使用该应用程序也会显示通知。

结果是通知只显示应用程序在后台,而不是其他方式。

2 个答案:

答案 0 :(得分:0)

你是否像这样处理app delegate中的本地通知?

func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
    // Do something you want
    println("Received Local Notification:")
    println(notification.alertBody)
}

上面是本地通知,还有另一种方法用于远程通知,

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// Do something you want
}

确保使用本地通知方法处理本地通知。

答案 1 :(得分:0)

请试试这个:

extension AppDelegate: UNUserNotificationCenterDelegate {
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert, .sound])
    }
}

您可以找到Apple doc here

我所理解的是,无论我发送给completionHandler的任何选项都会发生。

如果您只发送.alert,它只会显示提醒 如果您只发送.sound,它只会播放通知指定的声音。

如果我们同时发送两个选项,它们都会做。

如果我们不发送任何参数,它将不会做任何事情。

所以您需要做的是将参数发送为.alert

didFinishLaunchingWithOptions中,您还需要添加

UNUserNotificationCenter.current().delegate = self