URLSession پس زمینه (Background URLSession)
اینجا «URLSession پس زمینه (Background URLSession)» را ساده می گوییم. این مدل دانلود و آپلود را ادامه می دهد. حتی وقتی اپ خواب است. تمرکز ما پیکربندی، شروع کار، و تکمیل است.
پیکربندی URLSession پس زمینه
«پیکربندی پس زمینه (Background Configuration)» یک شناسه یکتا می خواهد. سپس «نماینده (Delegate)» رویدادها را دریافت می کند.
import Foundation;
final class BGSession: NSObject, URLSessionDownloadDelegate {
static let shared = BGSession();
lazy var session: URLSession = {
let config = URLSessionConfiguration.background(withIdentifier: "com.example.bg");
config.isDiscretionary = true;
return URLSession(configuration: config, delegate: self, delegateQueue: nil);
}();
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
// فایل موقت را به مسیر دائمی منتقل کن.
}
}
اینجا نشست پس زمینه ساخته می شود. سپس فراخوانی دانلود تکمیل مدیریت می شود.
شروع دانلود یا آپلود
«وظیفه دانلود (downloadTask)» برای فایل های بزرگ است. «وظیفه آپلود (uploadTask)» یک فایل را می فرستد.
import Foundation;
func startDownload() {
let url = URL(string: "https://example.com/large.zip")!;
BGSession.shared.session.downloadTask(with: url).resume();
}
func startUpload(file: URL) {
var req = URLRequest(url: URL(string: "https://example.com/upload")!);
req.httpMethod = "POST";
BGSession.shared.session.uploadTask(with: req, fromFile: file).resume();
}
دکمه را بزن و کار شروع می شود. سپس سیستم ادامه می دهد.
تکمیل رویدادهای پس زمینه
iOS اپ را بیدار می کند. سپس رویدادها می رسند. «هندلر تکمیل (Completion Handler)» را پل بزن.
import UIKit;
class AppDelegate: UIResponder, UIApplicationDelegate {
var bgCompletionHandler: (() -> Void)?;
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
bgCompletionHandler = completionHandler;
}
}
extension BGSession: URLSessionDelegate {
func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) {
DispatchQueue.main.async {
(UIApplication.shared.delegate as? AppDelegate)?.bgCompletionHandler?();
(UIApplication.shared.delegate as? AppDelegate)?.bgCompletionHandler = nil;
};
}
}
نکته: شناسه یکتا بده و کال بک های تکمیل را درست صدا بزن.
گام های عملی سریع
- 1) پیکربندی پس زمینه بساز.
- 2) Delegate را تنظیم کن.
- 3) دانلود یا آپلود را آغاز کن.
- 4) Completion Handler را پل بزن.
جمع بندی سریع
- URLSession پس زمینه کارها را ادامه می دهد.
- شناسه یکتا ضروری است.
- downloadTask برای فایل های بزرگ است.
- uploadTask فایل ها را می فرستد.
- هندلر تکمیل را فراموش نکن.
مطالب مرتبط: File System برای مسیرها، CloudKit برای همگام سازی. همچنین URLSession پس زمینه را نشان گذاری کن.