获取当前用户屏幕显示或不显示远程通知警报
get current user screen to display or not remote notification alert
我正在我的应用程序中实现远程通知:
当应用程序在前台
时,我正在控制远程通知的行为
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification, withCompletionHandler
completionHandler: @escaping (UNNotificationPresentationOptions) ->
Void)
我正在为完成处理程序使用这 3 个不同的选项:
completionHandler([.alert, .sound])
completionHandler([.sound])
例如,我的应用程序中有 2 个屏幕:
- 首页
- 对话列表
当用户正在使用我的应用并收到对话更新的远程通知时,我想要:
- 如果他在主屏幕上 -> completionHandler([.alert, .sound])
- 如果他在对话屏幕列表中 -> completionHandler([.sound])
我的应用程序有许多不同的屏幕,可以触发不同类型的远程通知。
获取当前查看的屏幕并选择所需的完成处理程序的最佳方法是什么。
一个简单的方法是检查当前可见的控制器(顶视图控制器)。查找最上面的代码是:
extension UIApplication {
static func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let navigationController = controller as? UINavigationController {
return topViewController(controller: navigationController.visibleViewController)
}
if let tabController = controller as? UITabBarController {
if let selected = tabController.selectedViewController {
return topViewController(controller: selected)
}
}
if let presented = controller?.presentedViewController {
return topViewController(controller: presented)
}
return controller
}
}
然后,在选择何时显示或不显示通知时,您可以执行如下操作:
if UIApplication.topViewController() is HomeViewController {
// Top controller is Home
}
可以从应用中的任何位置调用。
我正在我的应用程序中实现远程通知:
当应用程序在前台
时,我正在控制远程通知的行为func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification, withCompletionHandler
completionHandler: @escaping (UNNotificationPresentationOptions) ->
Void)
我正在为完成处理程序使用这 3 个不同的选项:
completionHandler([.alert, .sound])
completionHandler([.sound])
例如,我的应用程序中有 2 个屏幕:
- 首页
- 对话列表
当用户正在使用我的应用并收到对话更新的远程通知时,我想要:
- 如果他在主屏幕上 -> completionHandler([.alert, .sound])
- 如果他在对话屏幕列表中 -> completionHandler([.sound])
我的应用程序有许多不同的屏幕,可以触发不同类型的远程通知。 获取当前查看的屏幕并选择所需的完成处理程序的最佳方法是什么。
一个简单的方法是检查当前可见的控制器(顶视图控制器)。查找最上面的代码是:
extension UIApplication {
static func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let navigationController = controller as? UINavigationController {
return topViewController(controller: navigationController.visibleViewController)
}
if let tabController = controller as? UITabBarController {
if let selected = tabController.selectedViewController {
return topViewController(controller: selected)
}
}
if let presented = controller?.presentedViewController {
return topViewController(controller: presented)
}
return controller
}
}
然后,在选择何时显示或不显示通知时,您可以执行如下操作:
if UIApplication.topViewController() is HomeViewController {
// Top controller is Home
}
可以从应用中的任何位置调用。