Я пытаюсь реализовать SignalR с помощью SwiftR.connect - я следил за этим tutorial.Реализация SignalR с использованием Swift 3.0
Получение следующей ошибки.
Starting... Error: Optional(["message": Error during negotiation request.]) Disconnected.
Мой исходный код
import UIKit
import SwiftR
class ViewController: UIViewController {
@IBOutlet weak var statusLabel: UILabel!
@IBOutlet weak var startButton: UIButton!
var chatHub: Hub!
var connection: SignalR!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
SwiftR.useWKWebView = true
SwiftR.signalRVersion = .v2_2_1
SwiftR.transport = .longPolling
connection = SwiftR.connect("http://192.168.X.XX/MyChatApplicationServer/signalr") { [weak self] connection in
self?.chatHub = connection.createHubProxy("MyChatHub")
self?.chatHub?.on("newMessageReceived") { args in
print("MyChatHub on call start")
let message = args![0] as! String
let detail = args![1] as! String
print("Message: \(message) \nDetail: \(detail)")
}
// SignalR events
connection.starting = { [weak self] in
self?.statusLabel.text = "Starting..."
self?.startButton.isEnabled = false
print("Starting....")
}
connection.reconnecting = { [weak self] in
self?.statusLabel.text = "Reconnecting..."
self?.startButton.isEnabled = false
print("Reconnecting....")
}
connection.connected = { [weak self] in
print("Connection ID: \(connection.connectionID!)")
self?.statusLabel.text = "Connected"
self?.startButton.isEnabled = true
self?.startButton.setTitle("Stop", for: .normal)
print("Connected")
}
connection.reconnected = { [weak self] in
self?.statusLabel.text = "Reconnected. Connection ID: \(connection.connectionID!)"
self?.startButton.isEnabled = true
self?.startButton.setTitle("Stop", for: .normal)
print("Stop")
}
connection.disconnected = { [weak self] in
self?.statusLabel.text = "Disconnected"
self?.startButton.isEnabled = true
self?.startButton.setTitle("Start", for: .normal)
print("Disconnected")
}
connection.connectionSlow = { print("Connection slow...") }
connection.error = { error in
print("Error: \(error)")
// Here's an example of how to automatically reconnect after a timeout.
//
// For example, on the device, if the app is in the background long enough
// for the SignalR connection to time out, you'll get disconnected/error
// notifications when the app becomes active again.
if let source = error?["source"] as? String, source == "TimeoutException" {
print("Connection timed out. Restarting...")
connection.start()
}
}
connection.start()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func startStop(_ sender: Any) {
if let text = startButton.titleLabel?.text{
print("text val: \(text)")
connection?.start()
}else{
connection?.stop()
}
}
}
Примечание: 1) Я обновил SignalR Установка использованием стручок 'SwiftR' 2) В соответствии с урока я использую swift23 branch код 3) In pod SwiftR l ibrary следующий код не работает.
соединение = SigmalR ("http://192.168.X.XX/MyChatApplicationServer/signalr")
Получение следующее сообщение об ошибке.
"Cannot invoke initializer for type 'SignalR' with an argument list of type '(String)'"
Если я следующий код главной ветви.
Пожалуйста, помогите мне с этим. Спасибо заранее.
Подкачка (swift3), ветвь swift23 и главная ветвь (изменения API) - это все разные коды. Вам нужно будет выбрать одну версию библиотеки и придерживаться ее. Если WKWebView = false работает, но true - нет, значит, у вас, вероятно, нет CORS на вашем сервере SignalR. – Adam