gpt4 book ai didi

ios - 下载完成时通过 NSURLSession/NSURLSessionDownloadTask 发送本地通知

转载 作者:技术小花猫 更新时间:2023-10-29 10:51:25 28 4
gpt4 key购买 nike

我在 NSURLSession 上使用 NSURLSessionDownloadTask 对象,以允许用户在应用程序处于后台/设备锁定时下载文档。我还想通过本地通知通知用户个别下载已完成。

为此,我在 -URLSession:downloadTask:didFinishDownloadingToURL: 下载任务委托(delegate)方法中触发本地通知,但是我想知道是否有更好的地方添加代码触发一个通知,因为 Apple 解释它的方式,下载任务将被传递到系统,并且我从中得出一旦应用程序后台(或之后不久)将不会再在下载任务的委托(delegate)上调用这些委托(delegate)。

我的问题: 添加触发本地通知的代码的最佳位置是什么?有没有人以前有过将此类功能添加到他们的应用程序的经验?

最佳答案

您的问题的答案可以在 Apple 文档中找到 URL Loading System Programming Guide :

In iOS, when a background transfer completes or requires credentials, if your app is no longer running, iOS automatically relaunches your app in the background and calls the application:handleEventsForBackgroundURLSession:completionHandler: method on your app’s UIApplicationDelegate object. This call provides the identifier of the session that caused your app to be launched. Your app should store that completion handler, create a background configuration object with the same identifier, and create a session with that configuration object. The new session is automatically reassociated with ongoing background activity. Later, when the session finishes the last background download task, it sends the session delegate a URLSessionDidFinishEventsForBackgroundURLSession: message. Your session delegate should then call the stored completion handler.

If any task completed while your app was suspended, the delegate’s URLSession:downloadTask:didFinishDownloadingToURL: method is then called with the task and the URL for the newly downloaded file associated with it.

如您所见,它比设置 delegate 对象要复杂得多。通过委托(delegate)方法,只有当应用程序处于前台模式时,您才会收到通知。在其他情况下(应用程序处于后台模式,应用程序已终止)您需要处理上面引用中描述的 AppDelegate 方法。

Apple 还提供了 example project ,显示了如何处理后台下载/上传任务。此示例将帮助您找到放置“本地通知”代码的位置。

关于ios - 下载完成时通过 NSURLSession/NSURLSessionDownloadTask 发送本地通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31710320/

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