Junior — Middle
Kaip užtikrinti automatinį WebSocket prisijungimą po programos grįžimo iš sumažinto būsenos?
sobes.tech AI
Atsakymas iš AI
Automatinio WebSocket ryšio atnaujinimo po programėlės minimizavimo iOS, reikia stebėti programėlės gyvavimo ciklą ir atnaujinti ryšį aktyvavimo metu.
Dažniausiai tai daroma stebint UIApplication.didBecomeActiveNotification pranešimus arba įgyvendinant programėlės delegato applicationDidBecomeActive metodą. Šiuo metu tikrinama WebSocket būklė, ir jei ryšys uždaras, pradedamas naujas prisijungimas.
Pavyzdys Swift kalba naudojant 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 priėmimo klaida: \(error)")
case .success(let message):
// Žinutės apdorojimas
print("Gauta žinutė: \(message)")
self?.listen() // tęsti
}
}
}
deinit {
NotificationCenter.default.removeObserver(self)
webSocketTask?.cancel(with: .goingAway, reason: nil)
}
}
Taip, kiekvieną kartą aktyvinus programėlę, atliekamas patikrinimas ir, jei reikia, atnaujinamas WebSocket ryšys.