Sobes.tech
Junior — Middle

Comment assurer la reconnexion automatique du WebSocket après le retour de l'application depuis un état réduit?

sobes.tech IA

Réponse de l'IA

Pour rétablir automatiquement la connexion WebSocket après le retour de l'application depuis un état minimisé sur iOS, il est nécessaire de suivre le cycle de vie de l'application et de rétablir la connexion lors du passage à un état actif.

Cela se fait généralement en observant les notifications UIApplication.didBecomeActiveNotification ou en implémentant la méthode applicationDidBecomeActive dans le délégué de l'application. À ce moment, l'état du WebSocket est vérifié et, si la connexion est fermée, une reconnexion est initiée.

Exemple en Swift utilisant 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("Erreur de réception WebSocket : \(error)")
            case .success(let message):
                // Traitement du message
                print("Message reçu : \(message)")
                self?.listen() // continuer à écouter
            }
        }
    }

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

Ainsi, chaque fois que l'application revient à un état actif, la vérification est effectuée et, si nécessaire, la reconnexion au WebSocket est effectuée.