如何使用Apollo iOS客户端实现graphql订阅

raj*_*ade 6 graphql apollo-ios

我正在尝试使用apollo ios客户端实现graphql订阅。但是由于缺乏文档示例,因此无法弄清楚。阿波罗文档上给出的示例是:

let apollo: ApolloClient = {
  let configuration = URLSessionConfiguration.default
  // Add additional headers as needed
  configuration.httpAdditionalHeaders = ["Authorization": "Bearer <token>"] // Replace `<token>`

  let url = URL(string: "http://localhost:8080/graphql")!

  return ApolloClient(networkTransport: HTTPNetworkTransport(url: url, configuration: configuration))
}()
Run Code Online (Sandbox Code Playgroud)

APOLLO IOS指南:创建客户端

raj*_*ade 6

请按照以下步骤在apollo ios graphql客户端中实现订阅。

  1. 使用cocoapods:

    1. pod 'Apollo'
    2. pod 'Apollo/WebSocket'
    3. pod install
  2. 创建客户端以支持订阅和身份验证。在下面添加以下代码AppDelegate.swift

    1. WebSocket的-我们必须使用WebSocketTransportURLRequest
    2. 身份验证-我们必须将连接参数中的auth参数传递connectingPayload给服务器。对于http,我们正在问题片段中提到的标头中传递它。
    3. SplitNetworkTransport-结合两者httpwebsocket创建客户。我们必须使用httpNetworkTransportwebSocketNetworkTransport


lazy var apollo: ApolloClient = {
    let authPayloads = [
        "Authorization": "Bearer "
    ]
    let configuration = URLSessionConfiguration.default
    configuration.httpAdditionalHeaders = authPayloads

let map: GraphQLMap = authPayloads 
let wsEndpointURL = URL(string: "ws://localhost:8080/subscriptions")!
let endpointURL = URL(string: "http://localhost:8080/api")!
let websocket = WebSocketTransport(request: URLRequest(url: wsEndpointURL), connectingPayload: map)
let splitNetworkTransport = SplitNetworkTransport(
    httpNetworkTransport: HTTPNetworkTransport(
        url: endpointURL,
        configuration: configuration
    ), 
    webSocketNetworkTransport: websocket
)
return ApolloClient(networkTransport: splitNetworkTransport)
Run Code Online (Sandbox Code Playgroud)

}()

Run Code Online (Sandbox Code Playgroud)