在阅读完所有指南后,在检查了互联网上的数百篇文章后,我非常确定从未调用过receiveBackgroundNotification方法。
一切都很完美,但当应用程序处于后台时,会显示通知,并且永远不会调用此方法。似乎无法让它发挥作用。
假设所有正常操作和基本配置都做得很好并且正在运行,我该怎么做才能拦截和管理这个库的后台推送通知?
我会非常感激任何帮助。
答案 0 :(得分:0)
确保您配置了以下内容:
只有在有效负载中发送包含content-available = 1的推送通知时,Apple才会唤醒您的应用程序。该选项在作曲家中显示为“后台处理”,或者您可以在使用push api时在iOS overrides中进行设置。
答案 1 :(得分:0)
在Urban Airship iOS SDK v.13.4.0中,如果未调用func receivedBackgroundNotification(_ notificationContent: UANotificationContent, completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
,并且您将通知显示为警报,则可以处理func receivedNotificationResponse(_ notificationResponse: UANotificationResponse, completionHandler: @escaping () -> Void)
中的通知。请记住,您只应使用actionIdentifier == UNNotificationDefaultActionIdentifier
处理通知(用户从通知界面打开了应用)。
这是UAPushNotificationDelegate
实现的示例:
extension MyPushNotificationDelegate: UAPushNotificationDelegate {
public func receivedForegroundNotification(_ notificationContent: UANotificationContent, completionHandler: @escaping () -> Void) {
completionHandler()
}
public func receivedBackgroundNotification(_ notificationContent: UANotificationContent, completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
completionHandler(.newData)
}
public func receivedNotificationResponse(_ notificationResponse: UANotificationResponse, completionHandler: @escaping () -> Void) {
guard notificationResponse.actionIdentifier == UNNotificationDefaultActionIdentifier else {
completionHandler()
return
}
someFunc() {
completionHandler()
}
}
public func extend(_ options: UNNotificationPresentationOptions = [], notification: UNNotification) -> UNNotificationPresentationOptions {
[.alert, .badge, .sound]
}
}