Sobes.tech
Junior — Middle

Wie kann die automatische Wiederverbindung des WebSocket nach der Rückkehr der Anwendung aus dem minimierten Zustand sichergestellt werden?

sobes.tech KI

Antwort von AI

Um WebSocket nach der Rückkehr der Anwendung aus einem minimierten Zustand auf iOS automatisch wiederherzustellen, erfordert die Überwachung des Lebenszyklus der Anwendung und die Wiederherstellung der Verbindung beim Übergang in einen aktiven Zustand.

Dies geschieht in der Regel durch Beobachtung der Benachrichtigungen UIApplication.didBecomeActiveNotification oder durch Implementierung der Methode applicationDidBecomeActive im App-Delegate. Zu diesem Zeitpunkt wird der Zustand des WebSocket überprüft und, falls die Verbindung geschlossen ist, eine erneute Verbindung initiiert.

Beispiel in Swift mit 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 Fehler beim Empfang: \(error)")
            case .success(let message):
                // Nachricht verarbeiten
                print("Empfangene Nachricht: \(message)")
                self?.listen() // weiter zuhören
            }
        }
    }

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

Auf diese Weise wird bei jedem Rückkehr der Anwendung in den aktiven Zustand die Verbindung überprüft und bei Bedarf wiederhergestellt.