Starscream
Starscream copied to clipboard
The connection of websocket iOS13 above is normal, but the connection below iOS13 cannot be connected
let url = "ws://asr-rt-ws-uat.hivoice.cn:8080/v1/ws"
let appkey = "u7vstd7obbube7do76nlv3m3k54igs4qdx7kpoai"
let secret = "3425bffc8bac9aa135389aeda8629d87"
let time = Int(Date.init().timeIntervalSince1970*1000)
let sign = "\(appkey)\(time)\(secret)".SHA1().uppercased()
let builder = "\(url)?time=\(time)&appkey=\(appkey)&sign=\(sign)"
let builderURL = URL.init(string: builder)!
let request = URLRequest(url: builderURL)
self.socket = WebSocket(request: request, certPinner: FoundationSecurity(allowSelfSigned: true), compressionHandler: nil, useCustomEngine: false)
self.socket.delegate = self
//iOS13 connected(["Sec-WebSocket-Protocol": ""]) //iOS12 viabilityChanged(true) error(Optional(Starscream.HTTPUpgradeError.notAnUpgrade(403)))
I solved the issue by falling back to use FoundationTransport() instead of TCPTransport().
if #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *), !useCustomEngine {
self.init(request: request, engine: NativeEngine())
//} else if #available(macOS 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *) {
// self.init(request: request, engine: WSEngine(transport: TCPTransport(), certPinner: certPinner, compressionHandler: compressionHandler))
} else {
self.init(request: request, engine: WSEngine(transport: FoundationTransport(), certPinner: certPinner, compressionHandler: compressionHandler))
}