Urban Airship收到BackgroundNotification从未打过电话

时间:2018-06-04 19:38:14

标签: iphone push-notification urbanairship.com

在阅读完所有指南后,在检查了互联网上的数百篇文章后,我非常确定从未调用过receiveBackgroundNotification方法。

一切都很完美,但当应用程序处于后台时,会显示通知,并且永远不会调用此方法。似乎无法让它发挥作用。

假设所有正常操作和基本配置都做得很好并且正在运行,我该怎么做才能拦截和管理这个库的后台推送通知?

我会非常感激任何帮助。

2 个答案:

答案 0 :(得分:0)

确保您配置了以下内容:

  • 目标功能中启用的远程通知后台模式
  • 在您的测试设备上启用后台应用刷新功能
  • 假设您正在尝试使用UAPushNotificationDelegate,请确保您拥有automatic setup enabled或者您正在将所有正确的方法转发给UA SDK。

只有在有效负载中发送包含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]
    }
}