Don't show notification when in foreground

谁说胖子不能爱 提交于 2019-12-01 09:22:28

You can achieve this in AppDelegate by using the applicationState,

In iOS8:

  func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

    if !UIApplication.shared.applicationState == .active {
     // Handle your push notification here   
    }

}

In iOS10:

  1. import UserNotifications framework
  2. Implement UNUserNotificationCenterDelegate method

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    
    
    if UIApplication.shared.applicationState == .active { // In iOS 10 if app is in foreground do nothing.
        completionHandler([])
    } else { // If app is not active you can show banner, sound and badge.
        completionHandler([.alert, .badge, .sound])
    }
    
    }
    

Thanks.

In iOS you decide in AppDelegate.swift, what to do with notifications. In AppDelegate handle the notification for the appropriate case and discard for when app is in foreground.

In iOS 10, to handle notification when app is terminated and you launch the app from the notification, handle it in

func application(_ application: UIApplication,  didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

 if launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] != nil {
     if  let remoteNotif = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary

    } 
 }

}

For handling notification for foreground, use this method

 func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
     //handle notification here

 }

For handling notification for background, use this method:

 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
     //handle notification here

 }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!