# Websocket State

**URL:** <https://community.apollographql.com/t/websocket-state/5683>\
**Category:** Client SDKs\
**Tags:** client, mobile, ios\
**Created:** [February 9, 2023, 3:28pm UTC](https://community.apollographql.com/t/websocket-state/5683 "2023-02-09T15:28:39Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![David](https://avatars.discourse-cdn.com/v4/letter/d/aeb1de/32.png) [@David](https://community.apollographql.com/u/David)\
**Post date:** [February 9, 2023, 3:28pm UTC](https://community.apollographql.com/t/websocket-state/5683/1 "2023-02-09T15:28:39Z")

</div>

Hi,

I’m trying to use some subscriptions, but I believe something is failing in the first connection.  
When I try to subscribe, I have a subscription with success but without any value, after 5 minutes I get **“websocket is disconnected”** and then start to receive the events.  
Another thing I notice is subscription without authorization works instantaneity.  
Does someone know what happens?

```private
    let url = URL(string: "wss://myServer/graphql")!
    let webSocketClient = WebSocket(url: url, protocol: .graphql_transport_ws)
    let authPayload = ["authorization": APIManager.shared.keychain.getAuthToken()]
    let webSocketTransport = WebSocketTransport(websocket: webSocketClient)
    webSocketTransport.updateHeaderValues(authPayload)

    return webSocketTransport
  }()

```

```auto
subscriptionAPI.getAllPings(result: { requestResult in
      print("🔥⏰ \(requestResult)")
    })

```

Logs: **🔥⏰ success(nil)**

**🔥 firstName success(nil)**

**2023-02-09 12:25:38.311432+0000 YEO[16928:4076625] [] nw\_path\_necp\_check\_for\_updates Failed to copy updated result (22)**

**2023-02-09 12:28:16.568009+0000 YEO[16928:4077396] 10.3.0 - [FirebaseAnalytics][I-ACS800014] Cannot get flag for unregistered flag. SDK name, flag name: app\_measurement, session\_stitching\_token\_feature\_enabled**

**2023-02-09 12:28:16.595982+0000 YEO[16928:4077396] 10.3.0 - [FirebaseAnalytics][I-ACS800014] Cannot get flag for unregistered flag. SDK name, flag name: app\_measurement, session\_stitching\_token\_feature\_enabled**

**2023-02-09 12:28:16.617302+0000 YEO[16928:4077396] 10.3.0 - [FirebaseAnalytics][I-ACS800014] Cannot get flag for unregistered flag. SDK name, flag name: app\_measurement, session\_stitching\_token\_feature\_enabled**

**2023-02-09 12:28:16.633992+0000 YEO[16928:4077396] 10.3.0 - [FirebaseAnalytics][I-ACS800014] Cannot get flag for unregistered flag. SDK name, flag name: app\_measurement, session\_stitching\_token\_feature\_enabled**

**2023-02-09 12:28:16.651636+0000 YEO[16928:4077396] 10.3.0 - [FirebaseAnalytics][I-ACS800014] Cannot get flag for unregistered flag. SDK name, flag name: app\_measurement, session\_stitching\_token\_feature\_enabled**

**“websocket is disconnected”**

**2023-02-09 12:30:07.815090+0000 YEO[16928:4077992] [] nw\_path\_necp\_check\_for\_updates Failed to copy updated result (22)**

**🔥⏰ success(Optional(YEO.SyncEvent\_PINGSubscription.Data(\_\_data: Apollo.DataDict(\_data: [“SyncEvent\_PING”: AnyHashable([“time”: AnyHashable(“2023-02-09T12:30:12.284Z”), “\_\_typename”: AnyHashable(“SyncEvent\_PING”)])], \_variables: nil))))**

**🔥⏰ success(Optional(YEO.SyncEvent\_PINGSubscription.Data(\_\_data: Apollo.DataDict(\_data: [“SyncEvent\_PING”: AnyHashable([“time”: AnyHashable(“2023-02-09T12:30:17.285Z”), “\_\_typename”: AnyHashable(“SyncEvent\_PING”)])], \_variables: nil))))**

**🔥⏰ success(Optional(YEO.SyncEvent\_PINGSubscription.Data(\_\_data: Apollo.DataDict(\_data: [“SyncEvent\_PING”: AnyHashable([“\_\_typename”: AnyHashable(“SyncEvent\_PING”), “time”: AnyHashable(“2023-02-09T12:30:22.286Z”)])], \_variables: nil))))**

**🔥⏰ success(Optional(YEO.SyncEvent\_PINGSubscription.Data(\_\_data: Apollo.DataDict(\_data: [“SyncEvent\_PING”: AnyHashable([“\_\_typename”: AnyHashable(“SyncEvent\_PING”), “time”: AnyHashable(“2023-02-09T12:30:27.288Z”)])], \_variables: nil))))**

**🔥⏰ success(Optional(YEO.SyncEvent\_PINGSubscription.Data(\_\_data: Apollo.DataDict(\_data: [“SyncEvent\_PING”: AnyHashable([“\_\_typename”: AnyHashable(“SyncEvent\_PING”), “time”: AnyHashable(“2023-02-09T12:30:32.288Z”)])], \_variables: nil))))**

**🔥⏰ success(Optional(YEO.SyncEvent\_PINGSubscription.Data(\_\_data: Apollo.DataDict(\_data: [“SyncEvent\_PING”: AnyHashable([“\_\_typename”: AnyHashable(“SyncEvent\_PING”), “time”: AnyHashable(“2023-02-09T12:30:37.290Z”)])], \_variables: nil))))**

**🔥⏰ success(Optional(YEO.SyncEvent\_PINGSubscription.Data(\_\_data: Apollo.DataDict(\_data: [“SyncEvent\_PING”: AnyHashable([“time”: AnyHashable(“2023-02-09T12:30:42.291Z”), “\_\_typename”: AnyHashable(“SyncEvent\_PING”)])], \_variables: nil))))**

---

<div class="post-metadata">

**Author:** ![watson](https://sea1.discourse-cdn.com/flex019/user_avatar/community.apollographql.com/watson/32/2053_2.png) [@watson](https://community.apollographql.com/u/watson)\
**Post date:** [February 13, 2023, 7:24pm UTC](https://community.apollographql.com/t/websocket-state/5683/3 "2023-02-13T19:24:17Z")

</div>

Hi @david, it sounds like there might be some issues with how the auth is being handled on the server side based on you saying it works when Auth is off. The code snippet you provided is what’s in the [docs](https://www.apollographql.com/docs/ios/fetching/subscriptions#providing-authorization-tokens).

If you are using Apollo Server, you might want to check how you’re doing things in `onConnect` ([docs](https://www.apollographql.com/docs/apollo-server/data/subscriptions#onconnect-and-ondisconnect)). That is where you would be handling your authentication logic since the header can’t be sent with every subscription ping.

---

<div class="post-metadata">

**Author:** ![David](https://avatars.discourse-cdn.com/v4/letter/d/aeb1de/32.png) [@David](https://community.apollographql.com/u/David)\
**Post date:** [February 14, 2023, 6:17pm UTC](https://community.apollographql.com/t/websocket-state/5683/4 "2023-02-14T18:17:42Z")

</div>

Thank for the help @watson,  
Meanwhile, I forgot to update the post.  
I change the way I pass the `authorization` header now I’m using `WebSocketTransport.Configuration `:

```auto
    let webSocketClient = WebSocket(url: url, protocol: .graphql_transport_ws)
    let authPayload = ["authorization": token]
    let configuration = WebSocketTransport.Configuration(connectingPayload: authPayload)
    webSocketTransport = WebSocketTransport(websocket: webSocketClient, config: configuration)

```

Now works!  
Adding the headers like I was doing doesn’t configure the socket connection correctly and somehow makes the connection correctly when retries.  
But any way like this is the correct way to do it.

---

<div class="post-metadata">

**Author:** ![watson](https://sea1.discourse-cdn.com/flex019/user_avatar/community.apollographql.com/watson/32/2053_2.png) [@watson](https://community.apollographql.com/u/watson)\
**Post date:** [February 14, 2023, 6:37pm UTC](https://community.apollographql.com/t/websocket-state/5683/5 "2023-02-14T18:37:23Z")

</div>

Awesome, glad you got this figured out!
