【问题标题】:Integrate Apollo subscriptions on iOS with Action Cable being used on the backend for websockets将 iOS 上的 Apollo 订阅与后端用于 websockets 的 Action Cable 集成
【发布时间】:2019-07-01 17:37:25
【问题描述】:

我正在尝试使 iOS 上的 Apollo subscriptions 与使用 Action Cable 实现 websockets 的后端一起工作。我了解到 iOS 应用程序需要向后端发送 commandchannelchannel id 以使订阅工作 (see here)。在初始化 Apollo 实例时,我尝试在 WebSocketTransport 对象上使用函数 write func write(_ str: String, force forced: Bool = false, id: Int? = nil) in WebSocketTransport.swift。下面你可以看到我是如何做到的。

        let userDefault = UserDefaults.standard
        var authPayloads = Dictionary<String, String> ()
        var authToken = ""
        if let token = userDefault.object(forKey: "token") {
            authToken = "\(token)"
            authPayloads.updateValue(authToken, forKey: "authorization")
        }
       let configuration = URLSessionConfiguration.default
       configuration.httpAdditionalHeaders = authPayloads

        let map: GraphQLMap = authPayloads
        let wsEndpointURL = URL(string: "ws://localhost:8080/subscriptions/\(authToken)")!
        let endpointURL = URL(string: "http://localhost:8080/api")!

        websocket = WebSocketTransport(request: URLRequest(url: wsEndpointURL), connectingPayload: map)
       var channelId = Int(arc4random_uniform(100000))
       websocket?.write(stringify(json: ["command":"subscribe", "identifier": stringify(json: ["channel":"channelName", "channelId": channelId])]))

        let splitNetworkTransport = SplitNetworkTransport(
            httpNetworkTransport: HTTPNetworkTransport(
                url: endpointURL,
                configuration: configuration
            ),
            webSocketNetworkTransport: websocket!
        )
        return ApolloClient(networkTransport: splitNetworkTransport)
    }()

但是,后端在他们的日志中没有看到我正在写入 WebSocket 传输对象的内容,并且我无法订阅该特定频道。如果后端使用 Action Cable,我知道如何在 iOS 上使用 Apollo 订阅,并使两者协同工作吗?

【问题讨论】:

    标签: swift websocket apollo actioncable starscream


    【解决方案1】:

    目前唯一的解决方案是使用 Swift-ActionCableClient 接收流,并使用来自 ApolloClient 的突变/查询。 p>

    很遗憾! Apollo iOS 不知道如何与 ActionCable 频道进行通信,此问题报告在 Apollo-iOS Github Issue #634 和您的问题 Github Issue #454

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2018-07-08
      相关资源
      最近更新 更多