Junior — Middle
Kako osigurati automatsko ponovno uspostavljanje veze WebSocket nakon povratka aplikacije iz smanjenog stanja?
sobes.tech АИ
Одговор од АИ
Да бисте аутоматски поново успоставили 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 веза.