Hoe zorg je voor automatische herverbinding van WebSocket nadat de app uit de geminimaliseerde staat terugkeert?
sobes.tech AI
Antwoord van AI
Om automatisch de WebSocket-verbinding te herstellen nadat de app uit de achtergrond is teruggekeerd op iOS, moet je de levenscyclus van de app volgen en de verbinding herstellen wanneer de app actief wordt.
Dit wordt meestal gedaan door het observeren van de notificaties UIApplication.didBecomeActiveNotification of door het implementeren van de methode applicationDidBecomeActive in de app-delegate. Op dat moment wordt de status van de WebSocket gecontroleerd en, indien de verbinding gesloten is, wordt er een nieuwe verbinding gestart.
Voorbeeld in Swift met 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("Fout bij ontvangen WebSocket: \(error)")
case .success(let message):
// Verwerk bericht
print("Ontvangen bericht: \(message)")
self?.listen() // blijf luisteren
}
}
}
deinit {
NotificationCenter.default.removeObserver(self)
webSocketTask?.cancel(with: .goingAway, reason: nil)
}
}
Op deze manier wordt bij elke terugkeer van de app naar de actieve staat de status gecontroleerd en, indien nodig, wordt de WebSocket opnieuw verbonden.