Junior — Middle
Кандайча WebSocket автоматтык кайра туташтырууну камсыз кылуу керек, колдонмо минималдаштырылган абалдан кайтып келгенде?
sobes.tech AI
AIден жооп
iOS тиркемеси минимизацияланган учурда WebSocket байланышын автоматтык кайра орнотуу үчүн тиркеменин жашоо циклин көзөмөлдөө жана активдүү абалга өтүүдө байланышты калыбына келтирүү керек.
Көп учурда бул 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 менен кайра туташуу ишке ашырылат.