如何连接Socket.io?斯威夫特4

时间:2018-03-26 12:20:12

标签: ios swift socket.io

我已阅读Swift的 Socket.io latest documentation。还有一个新连接的例子:

let manager = SocketManager(socketURL: URL(string: "http://localhost:8080")!, config: [.log(true), .compress])
let socket = manager.defaultSocket

所以我创建了一个类 SocketIOManager ,如下所示:

class SocketIOManager: NSObject {

    static let manager = SocketManager(socketURL: URL(string: "myurl.com:443"))
    static let socket = manager.defaultSocket

    class func connectSocket(){
        socket.connect()
    }

    class func reciveMessage(){    
            socket.on("new-message-mob") { (dataArray, ack) in
                print(dataArray.count)
            }
    }
}

然后我只在我的ViewController中调用 SocketIOManager.connectSocket()方法。但服务器产生错误。我没有开发服务器端。我只需要知道 - 我是否正确创建连接?这些天你如何通过Socket.io连接socket?

P.S服务器错误 - 必须提供jwt(似乎没有令牌,但有)。

UPDATE(带虚拟值):

我像这样传递令牌:

static let manager = SocketManager(socketURL: URL(string: "https://myurl:443?token=\(token)")!)
static let socket = manager.defaultSocket

2 个答案:

答案 0 :(得分:3)

因此,要解决此问题,我们必须采取以下措施:

  1. 为manager.config添加 .connectParams([“token”:token]) - 在我的 case我必须使用“token”键作为URL参数。
  2. 添加 .secure(true) manager.config的参数。
  3. 添加“App Transport Security 设置“键在info.plist(字典类型)和子键”允许 任意加载“(布尔类型),带有YES值。
  4. <强> CODE:

    class SocketIOManager: NSObject {
    
        static let manager = SocketManager(socketURL: URL(string: "https://yoururl.com:443")!, config: [.log(true), .compress])
        static let socket = manager.defaultSocket
    
    
        class func connectSocket(){
            self.manager.config = SocketIOClientConfiguration(
                arrayLiteral: .connectParams(["token": token], .secure(true)
            )
            socket.connect()
        }
    
        class func disconnectSocket(){
            socket.disconnect()
        }
    }
    

答案 1 :(得分:1)

看起来您将token设置在错误的位置。根据{{​​3}},token应在配置中设置为标头参数:

manager.config = SocketIOClientConfiguration(
    arrayLiteral: .compress, .connectParams(["Authorization": token])
)

尝试以这种方式管理token