swift - SocketIOClient:处理事件:数据错误:[“无效的 SSL 证书”]
问题描述
问题是关于 Invalid 的SSL Certificate
。我一直在尝试连接到Websocket
使用SocketIOClient
. 但是遇到无效的 SSL 证书问题。用于连接 Socket 的代码是
import UIKit
import SocketIO
class SocketIOManager: NSObject, URLSessionDelegate {
static let shared = SocketIOManager()
var socket: SocketIOClient!
func socketConnect() {
let token = "ggggggg" //some token
let url = URL(string: "https://sample.com") // some https url
let specs: SocketIOClientConfiguration = [
.connectParams(["access_token": token]),
.log(true),
.forceNew(true),
.selfSigned(true),
.forcePolling(true),
.secure(true),
.reconnects(true),
.forceWebsockets(true),
.reconnectAttempts(3),
.reconnectWait(3),
.security(SSLSecurity(usePublicKeys: true)),
.sessionDelegate(self),
]
socket = SocketIOClient(socketURL: url!, config: specs)
socket.on(clientEvent: .connect) {data, ack in
print("socket connected")
self.socket.emitWithAck("emit", with: []).timingOut(after: 2, callback: { (data) in
print(data)
})
}
socket.on("fetch") { (dataArray, ack) in
print(dataArray)
}
socket.on(clientEvent: .error) {data, ack in
print(data)
}
socket.on(clientEvent: .disconnect) {data, ack in
print(data)
}
socket.onAny { (data) in
// print(data)
}
socket.connect()
}
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}
func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) {
// We've got an error
if let err = error {
print("Error: \(err.localizedDescription)")
} else {
print("Error. Giving up")
}
}
}
解决方案
有两种可能的解决方案
解决方案1:
只需在主包中添加所需的 ssl 证书(.cer 文件)。而已!!
解决方案2:
*如果您不需要自签名和 SSL Pining,请修改您的代码规范,如下面的代码。
let specs: SocketIOClientConfiguration = [
.connectParams(["access_token": token]),
.log(true),
.forceNew(true),
.forcePolling(true),
.reconnects(true),
.forceWebsockets(true),
.reconnectAttempts(3),
.reconnectWait(3),
.sessionDelegate(self),
]
推荐阅读
- ssis - 脚本任务未中止 FireError 上的执行
- android - 带有底部导航视图的协调器布局
- javascript - 为什么要提醒(~5);输出 = -6?
- mysql - 将另一个表导入 MySQL 数据库中的列。收到错误“表已满”
- java - 如何从 json 文件中获取 json 对象
- python - 使用 python 使用 open-CV 查找对象的测量值
- c++ - 在C ++中将基类分配给派生类,反之亦然以及静态和动态对象之间的区别
- ios - 新版本的设备 ID 正在更改
- excel - 布尔逻辑在使用 vba 创建的数组公式中不起作用
- python - 迁移和两个应用程序在不同机器上共享部分数据库