parse-community / ParseLiveQuery-Android

Parse LiveQuery client for Android.
Other
84 stars 32 forks source link

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

Open mkpazon opened 7 years ago

mkpazon commented 7 years ago

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 commented 7 years ago

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();
                }
            }
             ...
        });
mmimeault commented 7 years ago

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.

mkpazon commented 7 years ago

I am using 1.0.3