Sobes.tech
Junior — Middle

Cum se asigură reconectarea automată a WebSocket după revenirea aplicației din starea minimizată?

sobes.tech AI

Răspuns de la AI

Pentru a restabili automat conexiunea WebSocket după revenirea aplicației din starea minimizată pe iOS, trebuie să monitorizați ciclul de viață al aplicației și să restabiliți conexiunea atunci când treceți în starea activă.

De obicei, acest lucru se face prin observarea notificărilor UIApplication.didBecomeActiveNotification sau implementarea metodei applicationDidBecomeActive în delegatul aplicației. În acel moment, se verifică starea WebSocket-ului și, dacă conexiunea este închisă, se inițiază reconectarea.

Exemplu în Swift folosind 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("Eroare la primirea WebSocket: \(error)")
            case .success(let message):
                // Procesare mesaj
                print("Mesaj primit: \(message)")
                self?.listen() // ascultă în continuare
            }
        }
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
        webSocketTask?.cancel(with: .goingAway, reason: nil)
    }
}

Astfel, de fiecare dată când aplicația revine în starea activă, se verifică și, dacă este necesar, se reconectează WebSocket-ul.