Интегрируйте подписки Apollo на iOS с помощью Action Cable, который используется на сервере для веб-сокетов

Я пытаюсь заставить подписки Apollo на iOS работать с бэкэндом, который использует Action Cable для реализации веб-сокетов. Я узнал, что приложение iOS нужно отправить command, channel а также channel id на сервер, чтобы подписки работали ( см. здесь). Я пытался использовать функцию записи func write(_ str: String, force forced: Bool = false, id: Int? = nil) в WebSocketTransport.swift на объекте WebSocketTransport при инициализации экземпляра Apollo. Ниже вы можете увидеть, как я это делаю.

        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 Transport в своих журналах, и я не могу подписаться на этот конкретный канал. Любая идея, как я могу использовать подписки Apollo на iOS, если бэкэнд использует Action Cable, и заставить их работать вместе?

0 ответов

Единственное решение на данный момент - использовать Swift-ActionCableClient для получения потоков и использовать мутации / запросы от ApolloClient.

Несчастливо! Apollo iOS не знает, как взаимодействовать с каналами ActionCable, об этой проблеме сообщается в Apollo-iOS Github Issue #634 и вашей проблеме Github Issue #454

Другие вопросы по тегам