如果出现错误,请重新发送本地通知

时间:2017-05-29 19:03:04

标签: ios swift notifications

在我们的应用中,我们会将预定的本地通知作为提醒发送。通知上有一个按钮,用于将提醒标记为已完成。当我们处理本地通知时,我们会发送API请求以将提醒标记为已完成。

如果HTTP请求失败,我们希望重新发送本地推送通知有两个原因:1)用户知道原始操作失败,2)以便他们可以重试。

我们尝试在application:handleActionWithIdentifier:for:completionHandler回调中发送本地通知。我们从当前时间开始约5秒的重试通知。它适用于模拟器,但它不适用于实际设备。

我尝试在应用的application.beginBackgroundTaskWithName("showNotification", nil)方法中添加application:didFinishLaunchingWithOptions:launchOptions,这确实可以让它在设备上运行。但是,我担心它不是一个强有力的解决方案。我们的提醒通知可以在一天中的任何时间发送,beginBackgroundTaskWithName的文档说它只能暂时生效。

所以我的问题是:在iOS上真的没有办法重新发送本地通知吗?另一方面,如果有,我该怎么办?

1 个答案:

答案 0 :(得分:0)

尝试下一步:

func showScheduledNotification() {
    backgroundTaskID = UIApplication.shared.beginBackgroundTask(expirationHandler: { [weak self] in
        guard let backgroundTaskID = self?.backgroundTaskID else { return }
        UIApplication.shared.endBackgroundTask(backgroundTaskID)
    })
    DispatchQueue.global(qos: .utility).asyncAfter(deadline: .now() + 5.0) { [weak self] in
        guard let strongSelf = self else { return }
        if let backgroundTaskID = strongSelf.backgroundTaskID {
            UIApplication.shared.endBackgroundTask(backgroundTaskID)
            strongSelf.backgroundTaskID = nil
        }
        /* show notification */
        if /* showNotificationSuccess */ {
            return
        }
        strongSelf.showScheduledNotification()
    }
}

因此,每次尝试后,后台任务都将结束。如有必要,接下来将在5秒后开始。

别忘了添加:

var backgroundTaskID: UIBackgroundTaskIdentifier?