【发布时间】:2019-02-28 16:04:19
【问题描述】:
我正在尝试在 iOS 上使用 apollo 客户端实现订阅,我查看了 this 线程,但它对我不起作用。我仍然收到这个Authentication hook unauthorized this request, code: 1000 或Operation couldn't be completed Starscream.WSError error 1
我的代码是:
let apollo: ApolloClient = {
let authPayload = ["X-Hasura-Access-Key": "<my_key>",
"Content-Type": "application/json"]
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = authPayload
let map: GraphQLMap = authPayload
let url = URL(string: "https://url")!
let wsUrl = URL(string: "wss://url")!
let httpNetworkTransport = HTTPNetworkTransport(url: url, configuration: configuration)
let wsNetworkTransport = WebSocketTransport(request: URLRequest(url: wsUrl), connectingPayload: map)
return ApolloClient(networkTransport: SplitNetworkTransport(httpNetworkTransport: httpNetworkTransport,
webSocketNetworkTransport: wsNetworkTransport))
}()
它在查询方面工作得很好,但在 websocket 和订阅方面却不行。我做错了什么?
UPD:这很有趣,但如果我删除 wsNetworkTransport 中的有效负载,错误仍然存在。另外,如果我通过request.addValue手动添加请求头,错误又是一样的。
我这样称呼客户:
apollo.subscribe(subscription: OrdersSubscription(id: "123")) { (result, error) in
error == nil ? print(result!) : print(error!)
}
我还缺少任何其他设置吗?这东西真的缺少文档。
【问题讨论】:
-
检查你的 Access-Key ,这个错误很明显,因为你没有身份验证
-
@a.masri 我仔细检查了一下,它验证查询,但不验证订阅
-
基于 apollo 客户端文档,身份验证类型 Bearer 不是访问密钥,请查看此文档apollographql.com/docs/ios/initialization.html
-
WebSocketTransport 似乎对标头更改没有响应,这很奇怪,我尝试更改标头,但它不起作用 - 同样的错误
标签: ios swift graphql apollo hasura