我需要在我的iOS应用中集成subscription
。 subscription
在localhost
中的graphiql
上可以正常工作。我已经在Heroku
上部署了后端。我正在使用apollo-server
而不是hasura
。我的subscriptions
不适用于Heroku给出的网址,但在localhost
上可以正常使用。 Queries
和mutations
对于localhost
和Heroku
网址都可以正常工作。因此,我试图从我的iOS客户端访问我的subscription
。我将基本URL保留为本地主机。查询和突变部分适用于我的iOS客户端,但我的subscription
部分不起作用。
我已通过添加此命令将Apollo客户端配置为订阅
let httpNetworkTransport = HTTPNetworkTransport(url: URL(string: "http://localhost:5000")!)
httpNetworkTransport.delegate = self
let webSocketTransport = WebSocketTransport(request: URLRequest(url: URL(string: "http://localhost:5000")!))
let splitNetworkTransport = SplitNetworkTransport(
httpNetworkTransport: httpNetworkTransport,
webSocketNetworkTransport: webSocketTransport
)
return ApolloClient(networkTransport: splitNetworkTransport)
我还尝试了将http
替换为ws
的方法,
let webSocketTransport = WebSocketTransport(request: URLRequest(url: URL(string: "ws://localhost:5000")!))
订阅代码如下
subscription = Network.shared.apollo.subscribe(subscription: GetHealthConsultationSubscriptionSubscription()){
[weak self] result in
guard let self = self else {
return
}
switch result {
case .success(let result):
debugPrint(result.data?.healthConsultation.chiefComplaint)
case .failure(let error):
debugPrint(" Subscription Failure Error \(error)")
}
}
但是我从iOS客户端收到如下错误
" Subscription Failure Error WSError(type: Starscream.ErrorType.upgradeError, message: \"Invalid HTTP upgrade\", code: 400)"
此外,当我使用Graphiql
进行订阅并将localhost
替换为Heroku
的订阅网址时,也会出现以下错误。
答案 0 :(得分:1)
所以我的ios Code
没问题。问题出在我正在使用的Heroku
的免费套餐中。我尝试将subscription
替换为Hasura's Subscription
https://hasura.io/learn/graphql/ios/subscriptions/1-subscription/
,并且有效。