邯郸网站建设公司,电商网站开发的职责,百度怎么做网站广告,成都效果图公司有哪些文章目录 背景介绍方案及代码1、新建MAUI项目2、建立NSUrlSession会话连接3、使用NSUrlSessionDownloadTask 创建下载任务4、DidWriteData 监听下载5、DidFinishDownloading 完成下载6、CancelDownload (取消/暂停)下载7、ResumeDownload 恢复下载8、杀死进程-恢复下载 效果图总… 文章目录 背景介绍方案及代码1、新建MAUI项目2、建立NSUrlSession会话连接3、使用NSUrlSessionDownloadTask 创建下载任务4、DidWriteData 监听下载5、DidFinishDownloading 完成下载6、CancelDownload (取消/暂停)下载7、ResumeDownload 恢复下载8、杀死进程-恢复下载 效果图总结 背景
最近在MAUI项目中碰到了大文件下载方面的需求要求可以实现显示下载进度、暂停、继续下载等在开发过程中也是碰到了不少问题所以在此简单分享使用MAUI在IOS上完成下载功能的经验也希望大家少踩坑。文章中如有不妥的地方也请多多指教。
介绍
NSURLSession 是 iOS 中用于处理网络请求和数据下载的核心类之一。它提供了强大的功能使应用程序能够与远程服务器通信、下载文件、上传数据等。 本文我们借助NSUrlSession 中的NSUrlSessionDownloadTask来创建下载任务。 下载任务直接将服务器的响应数据写入临时文件在数据从服务器到达时为应用提供进度更新。 在后台会话中使用下载任务时即使应用处于挂起状态或未运行这些下载也会继续。 可以暂停取消下载任务稍后再恢复它们需要服务端支持还可以恢复由于网络连接问题而失败的下载 此方法内部实现了一边下载一边将下载数据写入沙盒的操作下载完成后会自动删除沙盒中的文件所以我们需要在回调DidFinishDownloading中将文件移动至其他位置进行保存。
方案及代码
1、新建MAUI项目 2、建立NSUrlSession会话连接
这里我们使用的网路连接类为NSUrlSession它提供了一个用于发出网络请求和处理异步网络任务的 API并且它支持后台传输。在初始化NSUrlSession之前我们需要先创建NSUrlSessionConfiguration它是NSUrlSession中的一个重要的配置NSUrlSessionConfiguration 有三种模式
DefaultSessionConfiguration默认模式BackgroundSessionConfiguration 后台模式 后台模式允许你创建一个后台会话该会话可以在应用程序处于后台或挂起状态时继续进行网络请求。你需要提供一个唯一的标识符identifier以便在应用程序重新启动时恢复会话。EphemeralSessionConfiguration瞬时模式 创建一个临时会话它在请求结束后不会持久化任何数据包括缓存和存储的凭据。适用于需要临时性的、不需要持久化数据的请求例如临时登录或隐私敏感的请求。
我们先在项目中新建IOSDownloadManagerService.cs然后继承于Microsoft.iOS 中的NSUrlSessionDownloadDelegate方法然后建立NSUrlSession会话连接 这里我们使用BackgroundSessionConfiguration 模式创建后台下载任务。 注意无论下载多少文件我们只需要初始化一个URLSession
3、使用NSUrlSessionDownloadTask 创建下载任务
这里我们使用 NSUrlSessionDownloadTask来实现下载资源会下载到一个临时文件下载完成需将文件移动至想要的路径系统会删除临时路径文件。
4、DidWriteData 监听下载
开始下载后我们可以通过 重写 DidWriteData 方法来获取当前正在下载的文件信息包括 当前的session会话、当前的下载任务NSURLSessionDownloadTask、本次传递过来的数据量、目前为止下载了多少的数据等。 我们通过这些信息来计算当前下载速度下载进度等。
打印下载进度监听日志 5、DidFinishDownloading 完成下载
下载完成后会触发DidFinishDownloading事件 通过重写DidFinishDownloading来监听下载完成事件将文件移动到自己想保存的路径下。
到这里我们就完成一个基础的文件下载功能。当然一个完整的下载管理功能我们还需要具备暂停下载、恢复下载、后台下载、杀死进程后恢复下载等功能的支持。
6、CancelDownload (取消/暂停)下载
我们可以通过NSUrlSessionDownloadTask的Cancel方法来暂停或取消下载任务Cancel方法会回调一个NSData格式断点数据给我们然后我们可以将断点数据保存起来用于后续恢复下载。 在此之前我们需要调整 StartDownload 方法将文件下载任务NSUrlSessionDownloadTask 存起来用户后续恢复下载。 CancelDownload 暂停/取消下载 注意仅满足以下条件时才能恢复下载 1、首次请求资源以来资源未发生更改 2、任务是 HTTP 或 HTTPS 请求GET 3、服务器在其响应中提供 or 头或者同时提供 ETagLast-Modified 4、服务器支持字节范围请求 5、系统尚未删除临时文件 7、ResumeDownload 恢复下载
这里我们利用 NSUrlSession 的 CreateDownloadTask(NSData resumeData) 方法根据 断点数据 创建一个新的下载任务以便从之前中断的位置继续下载。
8、杀死进程-恢复下载
这里我们使用 DidCompleteWithError 方法来监听载任务错误事件包括杀死进程 当我们的正在执行下载任务的应用程序被异常杀掉进程后重新启动后会进入DidCompleteWithError方法所以我们要想恢复下载就需要先获取下载任务的断点数据这一点我们可以利用本地存储提前将断点数据存入到本地文件中。 Maui.Essentials DidCompleteWithError 到此基本上大功告成了。
效果图 总结
本文主要介绍了基于IOS下载中的几个关键方法还是主要以介绍思路为主。 为了便于展示文章中的代码示例拆得比较分散大家还是以熟悉主要流程和主要方法为先至于实现方式八仙过海各显神通。
关于NSURLSessionDownloadTask 更多的内容请参考官方文档 https://developer.apple.com/documentation/foundation/nsurlsessiondownloadtask 最后由于文章篇幅有限对于UI部分渲染的部分并没有展示由于数据渲染还是比较简单大家可以基于Blazor实现也可直接使用MAUI ProgressBar等这里就不过多介绍对MAUI与Blazor感兴趣的朋友可自行深入研究。