【问题标题】:How to detect if the main app is in the foreground in the NotificationServiceExtension?如何在 NotificationServiceExtension 中检测主应用程序是否在前台?
【发布时间】:2021-01-30 03:32:14
【问题描述】:

无论应用是后台还是前台,我的应用都允许 APNS 通知进入,例如:

func userNotificationCenter(_ center: UserNotificationCenterProtocol, willPresent notification: NotificationProtocol, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert, .badge, .sound])
}

但是,在扩展程序本身中,我似乎无法确定应用程序当前是前台还是后台。尝试使用 UIApplication.shared 会导致错误:

let application = UIApplication.shared

错误:

“共享”在 iOS 应用程序扩展中不可用:在适当的情况下使用基于视图控制器的解决方案。

还有其他方法可以在 Notification Service Extension 中确定应用的当前状态吗? 我看到有一些特定于扩展的生命周期方法,例如 NSExtensionHostWillEnterForeground,但我不知道如何订阅到那些通知(the documentation 是稀疏的)。

【问题讨论】:

  • 您的代码似乎不错。它是 UIApplication.shared.applicationState == .active。你导入 UIKIt 了吗?
  • 问题是扩展不能使用 UIApplication.shared。显然苹果不希望扩展知道主应用的状态。

标签: ios swift


【解决方案1】:

据我所知,目前这是不可能的。

我的猜测是 Apple 希望这些扩展依赖于主应用程序的状态。

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多