Sobes.tech
Junior — Middle

Πώς διασφαλίζεται η αυτόματη επανασύνδεση του WebSocket μετά την επιστροφή της εφαρμογής από την ελαχιστοποίηση;

sobes.tech AI

Απάντηση από AI

Για να επαναφέρετε αυτόματα τη σύνδεση WebSocket μετά την επιστροφή της εφαρμογής από την ελαχιστοποίηση σε iOS, πρέπει να παρακολουθείτε τον κύκλο ζωής της εφαρμογής και να επανασυνδέεστε όταν μεταβαίνετε σε ενεργή κατάσταση.

Αυτό γίνεται συνήθως παρακολουθώντας τις ειδοποιήσεις UIApplication.didBecomeActiveNotification ή υλοποιώντας τη μέθοδο applicationDidBecomeActive στον διαχειριστή της εφαρμογής. Σε αυτό το σημείο, ελέγχεται η κατάσταση του WebSocket και, εάν η σύνδεση είναι κλειστή, ξεκινά η επανασύνδεση.

Παράδειγμα σε Swift με χρήση 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: \(error)")
            case .success(let message):
                // Επεξεργασία μηνύματος
                print("Ληφθέν μήνυμα: \(message)")
                self?.listen() // συνεχίστε να ακούτε
            }
        }
    }

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

Έτσι, κάθε φορά που η εφαρμογή επιστρέφει σε ενεργή κατάσταση, γίνεται έλεγχος και, αν χρειάζεται, επανασυνδέεται το WebSocket.