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

Nas*_*omo 2 ios socket.io swift

我已阅读最新的文档Socket.io的斯威夫特。还有一个新连接的示例:

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

因此,我创建了一个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)
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我只是在ViewController中调用方法SocketIOManager.connectSocket()。但是服务器产生错误。我不开发服务器端。我只需要知道-我是否正确建立了连接?这些天您如何通过Socket.io连接到套接字?

PS Server错误-必须提供jwt(似乎没有令牌,但有令牌)。

UPDATE(带有伪值):

我像这样传递令牌:

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

pac*_*ion 6

看起来你设置token在错误的地方。根据问题token应该在配置中设置为header参数:

manager.config = SocketIOClientConfiguration(
    arrayLiteral: .compress, .connectParams(["Authorization": token])
)
Run Code Online (Sandbox Code Playgroud)

尝试以token这种方式管理您。


Nas*_*omo 6

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

  1. 为manager.config 添加.connectParams([[“ token”:token]] -在我的情况下,我必须使用“ token”键作为URL参数。
  2. 为manager.config 添加一个.secure(true)参数。
  3. 在info.plist(词典类型)中添加“ App Transport Security Settings”应用程序传输安全设置)键,然后将子键“ Allow Arbitrary Loads”(布尔型)添加为YES值。

码:

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()
    }
}
Run Code Online (Sandbox Code Playgroud)