Junior — Middle
როგორ უზრუნველვყოთ WebSocket-ის ავტომატური ხელახლა დაკავშირება პროგრამის მინიმალიზებული მდგომარეობიდან დაბრუნების შემდეგ?
sobes.tech AI
პასუხი AI-სგან
ავტომატური WebSocket-ის დაკავშირების აღდგენა iOS-ის აპლიკაციის მინიმიზაციის შემდეგ, საჭიროა აპლიკაციის სიცოცხლის ციკლის მონიტორინგი და დაკავშირების აღდგენა აქტივობის დროს.
ეს ჩვეულებრივ კეთდება UIApplication.didBecomeActiveNotification შეტყობინებების მეთვალყურეობით ან აპლიკაციის დელეგატის applicationDidBecomeActive მეთოდის განხორციელებით. ამ დროს შემოწმდება WebSocket-ის მდგომარეობა, და თუ კავშირი დახურულია, დაიწყება ახალი დაკავშირება.
Swift-ის მაგალითი URLSessionWebSocketTask-ის გამოყენებით:
import UIKit
class WebSocketManager {
private var webSocketTask: URLSessionWebSocketTask?
private let urlSession = URLSession(configuration: .default)
private let url = URL(string: "wss://example.com/socket")!
init() {
NotificationCenter.default.addObserver(self, selector: #selector(appDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
connect()
}
func connect() {
webSocketTask = urlSession.webSocketTask(with: url)
webSocketTask?.resume()
listen()
}
@objc private func appDidBecomeActive() {
if webSocketTask?.state != .running {
connect()
}
}
private func listen() {
webSocketTask?.receive { [weak self] result in
switch result {
case .failure(let error):
print("WebSocket მიღების შეცდომა: \(error)")
case .success(let message):
// შეტყობინების დამუშავება
print("მიღებული შეტყობინება: \(message)")
self?.listen() // გაგრძელება
}
}
}
deinit {
NotificationCenter.default.removeObserver(self)
webSocketTask?.cancel(with: .goingAway, reason: nil)
}
}
ამ გზით, ყოველი აპლიკაციის აქტივაციის დროს ხდება შემოწმება და საჭიროების შემთხვევაში — WebSocket-ის ხელახლა დაკავშირება.