ios - 当应用程序在 swift 3 中处于前台时,隐藏特定 View Controller 的远程通知

标签 ios swift3 push-notification swift4

我在我的聊天应用程序中使用 firebase 通知,我正在将它发送到我的设备。我的问题是如何在特定的 View Controller 中隐藏远程通知。当应用程序位于我正在使用的前台时

UNUserNotificationCenter, will present delegate method

显示横幅,但是当我在 chatViewController 中时,我不想显示通知横幅、声音、警报,就像我想要的应用程序功能一样......对不起我的英语

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

    let userInfo:[AnyHashable:Any] =  notification.request.content.userInfo
    print("\(userInfo)")

    completionHandler([.alert, .badge, .sound])
}

最佳答案

您可以使用以下方法找到当前 View Controller :

extension UIViewController {
    var topViewController: UIViewController? {
        return self.topViewController(currentViewController: self)
    }

    private func topViewController(currentViewController: UIViewController) -> UIViewController {
        if let tabBarController = currentViewController as? UITabBarController,
            let selectedViewController = tabBarController.selectedViewController {
            return self.topViewController(currentViewController: selectedViewController)
        } else if let navigationController = currentViewController as? UINavigationController,
            let visibleViewController = navigationController.visibleViewController {
            return self.topViewController(currentViewController: visibleViewController)
       } else if let presentedViewController = currentViewController.presentedViewController {
            return self.topViewController(currentViewController: presentedViewController)
       } else {
            return currentViewController
        }
    }
}

然后,在 func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 添加此代码:

if self.window?.rootViewController?.topViewController is ChatViewController {
    completionHandler([])
} else {
    completionHandler([.alert, .badge, .sound])
}

关于ios - 当应用程序在 swift 3 中处于前台时,隐藏特定 View Controller 的远程通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48660314/

相关文章:

ios - 如何创建一个通用函数来加载 View Controller ?

php - 如何从 onesignal 发送推送通知,设备 ID 存储在数据库中 - cordova 应用程序

ios - Apple 说即使 wifi 已连接也无法连接到 wifi

ios - 使用 Apple ID 登录

iphone - iTunes 应用内购买

ios - 如何将从互联网下载的数据保存到内部设备?

ios - XCode8 Swift3 - 打开联系人列表并通过单击检索数据时出现问题

android - 当日期临近时通知用户

android - 在android中创建自定义通知

ios - 在 iOS 7 中,如何在使用半透明 UINavigationBar 时滚动到 UIScrollView 的顶部?