Junior — Middle
Kā nodrošināt WebSocket automātisku atkļūdošanu pēc lietojumprogrammas atgriešanās no minimizētā stāvokļa?
sobes.tech AI
Atbilde no AI
Automātiska WebSocket savienojuma atjaunošana pēc lietotnes minimizēšanas iOS, ir jāseko lietotnes dzīves ciklam un jāatjauno savienojums aktivizācijas laikā.
Parasti tas tiek darīts, uzraugot UIApplication.didBecomeActiveNotification paziņojumus vai īstenojot lietotnes deleģēta applicationDidBecomeActive metodi. Šajā brīdī tiek pārbaudīts WebSocket stāvoklis, un, ja savienojums ir slēgts, tiek uzsākts jauns savienojums.
Piemērs Swift valodā, izmantojot 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 saņemšanas kļūda: \(error)")
case .success(let message):
// Ziņojuma apstrāde
print("Saņemta ziņa: \(message)")
self?.listen() // turpināt
}
}
}
deinit {
NotificationCenter.default.removeObserver(self)
webSocketTask?.cancel(with: .goingAway, reason: nil)
}
}
Tādējādi, katru reizi, kad lietotne tiek aktivizēta, tiek veikta pārbaude un, ja nepieciešams, atjaunots WebSocket savienojums.