代码之家  ›  专栏  ›  技术社区  ›  Peter

UnnotificationServiceExtension-当应用程序处于活动状态时隐藏

  •  0
  • Peter  · 技术社区  · 5 年前

    我在用 UNNotificationServiceExtension 将图像添加到iOS APN通知。除了在应用程序处于活动状态时(在前台)显示通知外,它工作得很好。当应用程序处于活动状态时,我希望使用Toast处理通知,而不是在活动应用程序顶部显示标准的iOS通知。

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

    2 回复  |  直到 5 年前
        1
  •  1
  •   teddy    5 年前

    基于苹果的 documentation 默认情况下,当应用程序处于活动状态时,不应显示通知。

    如果通知到达时应用程序位于前台,则共享用户通知中心调用此方法将通知直接传递到应用程序。如果实现此方法,则可以采取任何必要的操作来处理通知并更新应用程序。完成后,调用CompletionHandler块并指定希望系统如何通知用户(如果有)。

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

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

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    
        // Perform additional handling of the notification, if needed.
    
        completionHandler([])
    }
    
        2
  •  0
  •   Mojtaba Hosseini    5 年前

    打电话 completionHandler(.newData) 里面 application(_:didReceiveRemoteNotification:fetchCompletionHandler:) 导致在应用程序中显示横幅。你可以摆脱它。

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