ParseLiveQuery-Android icon indicating copy to clipboard operation
ParseLiveQuery-Android copied to clipboard

Subscribing to Parse Live Query the first time doesn't work

Open mkpazon opened this issue 7 years ago • 3 comments

In my activity's onResume() I am subscribing to live query

@Override
protected void onResume() {
     SubscriptionHandling<ParseObject> subscriptionHandling = mParseLiveQueryClient.subscribe(messageQuery);
     subscriptionHandling.handleEvents(new SubscriptionHandling.HandleEventsCallback<ParseObject>() {
            @Override
            public void onEvents(ParseQuery<ParseObject> query, SubscriptionHandling.Event event, ParseObject parseMessage) {
                // HANDLING all events
                Timber.d("getMessageHistory -> .onEvents");
                Timber.i(event.name());
            }
        });
}

In my logs I see the following:

V/ParseLiveQueryClient: Socket stateChanged
V/ParseLiveQueryClient: Socket stateChanged
V/ParseLiveQueryClient: Socket opened
V/ParseLiveQueryClient: Socket onMessage {"op":"connected","clientId":88}
V/ParseLiveQueryClient: Connected, sending pending subscription

No events are being caught.

When I switch to another application and go back then my onResume() is triggered again re-registering to live query. I get the following logs: (Notice that this now has the "subscribed" part)

V/ParseLiveQueryClient: Socket stateChanged
V/ParseLiveQueryClient: Socket stateChanged
V/ParseLiveQueryClient: Socket opened
V/ParseLiveQueryClient: Socket onMessage {"op":"connected","clientId":91}
V/ParseLiveQueryClient: Connected, sending pending subscription
V/ParseLiveQueryClient: Socket onMessage {"op":"subscribed","clientId":91,"requestId":1}

This now is able to receive all the events.

Howcome the first registration doesn't work while the 2nd one works?

mkpazon avatar May 17 '17 06:05 mkpazon

One ugly work around I came up with is to disconnect and reconnect:

 mParseLiveQueryClient.registerListener(new ParseLiveQueryClientCallbacks() {
            @Override
            public void onLiveQueryClientConnected(ParseLiveQueryClient client) {
                Timber.d("[liveQuery] -> .onLiveQueryClientConnected");
                if (counter == 0) {
                    client.disconnect();
                    counter++;
                    startWebsocketConnection();
                }
            }
             ...
        });

mkpazon avatar May 17 '17 06:05 mkpazon

Which version of liveQuery are you using? Of course, it's not normal that you need 2 subscriptions to make it work. It should be working the first time.

mmimeault avatar May 24 '17 13:05 mmimeault

I am using 1.0.3

mkpazon avatar May 24 '17 16:05 mkpazon