【问题标题】:How to connect with Socket.io? Swift 4如何与 Socket.io 连接?斯威夫特 4
【发布时间】:2018-09-04 14:12:09
【问题描述】:

我已阅读 Swift 的 Socket.iolatest 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(似乎没有令牌,但有)。

更新(使用虚拟值):

我正在传递这样的令牌:

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

【问题讨论】:

  • > it seems like no token, but there is。但是您的代码没有令牌。你确定你传递了令牌吗?
  • 我传递了一个这样的令牌:static let manager = SocketManager(socketURL: URL(string: "myurl.com:443?token=(token)")!)。但我不确定如何传递 URL 参数。
  • 再次检查你如何放置令牌。我们可以看到一个带有虚拟值的示例吗?
  • 用令牌示例更新我的帖子

标签: ios swift socket.io


【解决方案1】:

您似乎将token 设置在错误的位置。根据issuetoken应该在配置中设置为header参数:

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

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

【讨论】:

  • 是的,它解决了我的问题。但是我们必须添加更多设置来运行这个坏男孩。如果有人遇到同样的问题,请参阅下面的答案。
【解决方案2】:

所以,要解决这个问题,我们必须采取一些措施:

  1. 为 manager.config 添加一个 .connectParams(["token": token]) - 在我的 如果我必须使用“token”键作为 URL 参数。
  2. 添加一个 .secure(true) manager.config 的参数。
  3. 添加 “应用程序传输安全性 设置”键在info.plist(字典类型)和子键“允许 任意载荷”(布尔类型),值为 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()
    }
}

【讨论】:

  • 你怎么知道的?
猜你喜欢
  • 1970-01-01
  • 2017-07-22
  • 2017-03-24
  • 1970-01-01
  • 2019-08-02
  • 2016-02-08
  • 2017-11-13
  • 2015-08-19
  • 2014-09-11
相关资源
最近更新 更多