gpt4 book ai didi

ios - 出现错误时重新发送本地通知

转载 作者:行者123 更新时间:2023-11-30 12:25:41 24 4
gpt4 key购买 nike

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

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

我们尝试在 application:handleActionWithIdentifier:for:completionHandler 回调中发送本地通知。我们将重试通知安排为从当前时间起约 5 秒。它可以在模拟器上运行,但不能在实际设备上运行。

我尝试在应用程序的 application:didFinishLaunchingWithOptions:launchOptions 方法中添加 application.beginBackgroundTaskWithName("showNotification", nil) ,这确实使它可以在设备上运行。但是,我担心这不是一个可靠的解决方案。我们的提醒通知可以在一天中的任何时间发送,并且 beginBackgroundTaskWithName 的文档表明它只能暂时起作用。

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

最佳答案

下一步尝试:

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?

关于ios - 出现错误时重新发送本地通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44249016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com