【发布时间】: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。显然苹果不希望扩展知道主应用的状态。