Sobes.tech
Junior — Middle

Uygulama minimize durumundan geri döndükten sonra WebSocket'in otomatik yeniden bağlanmasını nasıl sağlayabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

iOS'ta uygulama simge durumundan geri döndüğünde WebSocket bağlantısını otomatik olarak yeniden kurmak için uygulamanın yaşam döngüsünü izlemek ve aktif duruma geçerken bağlantıyı yeniden kurmak gerekir.

Genellikle bu, UIApplication.didBecomeActiveNotification bildirimlerini gözlemleyerek veya uygulama delegesinde applicationDidBecomeActive yöntemini uygulayarak yapılır. Bu noktada, WebSocket durumu kontrol edilir ve bağlantı kapalıysa yeniden bağlanma başlatılır.

Swift'te URLSessionWebSocketTask kullanarak örnek:

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 alınan hata: \(error)")
            case .success(let message):
                // Mesajı işle
                print("Alınan mesaj: \(message)")
                self?.listen() // dinlemeye devam et
            }
        }
    }

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

Bu şekilde, uygulama aktif duruma döndüğünde, bağlantı kontrol edilir ve gerekirse WebSocket yeniden bağlanır.