【问题标题】:UNNotificationServiceExtension - hide when app is activeUNNotificationServiceExtension - 应用程序处于活动状态时隐藏
【发布时间】:2019-07-04 00:35:41
【问题描述】:

我正在使用 UNNotificationServiceExtension 将图像添加到 iOS APNS 通知。它运行良好,只是即使应用程序处于活动状态(在前台)也会显示通知。当应用程序处于活动状态时,我想使用 toast 处理通知,而不是在活动应用程序的顶部显示标准 iOS 通知。

问:有没有办法从通知服务扩展中检测应用程序的状态,并在应用程序处于活动状态时阻止通知显示?

【问题讨论】:

  • 嗯,除非我弄错了,否则我相信这是默认行为,除非您要求,否则标准 iOS 通知不会出现????...您是否在代码中执行此操作: stackoverflow.com/a/40756206/5501940 ?如果是,那么您应该删除 completionHandler([.alert, .badge, .sound])
  • 我不希望出现通知。而且我正在使用通知服务扩展,因此 AppDelegate 的 didReceiveRemoteNotification 方法中的更改没有任何效果。

标签: ios objective-c swift apple-push-notifications unnotificationserviceextension


【解决方案1】:

application(_:didReceiveRemoteNotification:fetchCompletionHandler:) 内调用completionHandler(.newData) 会导致在应用内显示横幅。你可以摆脱它。

func application(_ application: UIApplication,
                   didReceiveRemoteNotification userInfo: [AnyHashable : Any],
                   fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
   // completionHandler(.newData) // <- Comment it out
}

【讨论】:

  • 使用通知服务扩展时不会阻止通知。也没有调用 self.contentHandler(nil);在扩展中。
【解决方案2】:

根据 Apple 的 documentation 通知,默认情况下应用程序处于活动状态时不应出现通知。

如果您的应用在通知到达时处于前台,则共享用户通知中心会调用此方法将通知直接发送到您的应用。如果你实现了这个方法,你可以采取任何必要的行动来处理通知和更新你的应用程序。完成后,调用 completionHandler 块并指定您希望系统如何提醒用户(如果有的话)。

如果你使用通知服务扩展并不重要 - 通知总是由应用程序处理,但可以先使用扩展来修改它。

试试这段代码(事实上,由于在应用程序处于活动状态时会出现通知,因此您可能在某处实现了此方法 - 如果您不需要它,您可以将其删除)。

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

    // Perform additional handling of the notification, if needed.

    completionHandler([])
}

【讨论】:

  • 这是正确答案。非常感谢@teddy。
猜你喜欢
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多