Estoy tratando de hacer que las suscripciones de Apollo en iOS funcionen con un backend que usa Action Cable para implementar websockets. Aprendí que la aplicación iOS necesita enviar command , channel e channel id de canales al backend para que las suscripciones funcionen ( ver aquí ). He intentado usar la función write func write(_ str: String, force forced: Bool = false, id: Int? = nil) en WebSocketTransport.swift en el objeto WebSocketTransport al inicializar la instancia de Apollo. A continuación puedes ver cómo lo estoy haciendo.
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) }()Sin embargo, el backend no ve lo que escribo en el objeto Transporte de WebSocket en sus registros y no puedo suscribirme a ese canal específico. ¿Alguna idea de cómo puedo usar las suscripciones de Apollo en iOS si el backend usa Action Cable y hacer que los dos funcionen juntos?
La única solución por ahora es usar Swift-ActionCableClient para recibir transmisiones y usar las mutaciones/consultas de ApolloClient .
¡Desgraciadamente! Apollo iOS no sabe cómo comunicarse con los canales de ActionCable, este problema se informa en Apollo-iOS Github Problema n.º 634 y Tu problema Github Problema n.º 454