Junior — Middle
Como garantir a reconexão automática do WebSocket após o retorno da aplicação do estado minimizado?
sobes.tech IA
Resposta da IA
Para restabelecer automaticamente a conexão WebSocket após o retorno da aplicação de um estado minimizado no iOS, é necessário monitorizar o ciclo de vida da aplicação e restabelecer a conexão ao passar para um estado ativo.
Normalmente, isso é feito observando as notificações UIApplication.didBecomeActiveNotification ou implementando o método applicationDidBecomeActive no delegado da aplicação. Nesse momento, verifica-se o estado do WebSocket e, se a conexão estiver fechada, inicia-se uma reconexão.
Exemplo em Swift usando 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("Erro ao receber WebSocket: \(error)")
case .success(let message):
// Processar mensagem
print("Mensagem recebida: \(message)")
self?.listen() // continuar ouvindo
}
}
}
deinit {
NotificationCenter.default.removeObserver(self)
webSocketTask?.cancel(with: .goingAway, reason: nil)
}
}
Dessa forma, toda vez que a aplicação retorna a um estado ativo, a verificação é feita e, se necessário, a reconexão ao WebSocket é realizada.