DataDog / dd-sdk-flutter

Flutter bindings and tools for utilizing Datadog Mobile SDKs
Apache License 2.0
41 stars 40 forks source link

Calling DatadogSdk.instance.setUserInfo doesn't update ongoing RUM sessions #623

Open mbtodorov opened 2 weeks ago

mbtodorov commented 2 weeks ago

Describe the bug

For context, we have a flutter application with a standard JWT auth setup. We have configured to call DatadogSdk.instance.setUserInfo whenever we get the first access token for our session in order to distinguish anonymous vs user RUM sessions. This can either be:

When doing analysis of our onboarding flow dropoff, we noticed that our user IDs are not attached to the first session of newly created accounts. Here is a screenshot: Screenshot 2024-06-11 at 14 11 29

So you can see that the upper half of that session is for an anonymous user who hasn't craeted an account yet. After the tap on log_in button we have a token so the app would've called DatadogSdk.instance.setUserInfo. However the session does not have any user attached to its attributes

Screenshot 2024-06-11 at 14 17 02

Here is what a session with a user looks like:

Screenshot 2024-06-11 at 14 17 17

I am not sure what the expected behaviour here is? I would assume either the session gets split in two, or the user gets attributed to the anonymous events as well. But currently we are losing all data altogether, which makes it harder to measure onboarding flow drop off for those first user sessions, does that make sense?

If this is expected behaviour, is there a way to work around it? Perhaps some method in the SDK that restarts the session when the user has been identified?

Reproduction steps

Start a session as an anonymous user, and subsequently authenticate. Observe that the user attributes are not applied to the session

SDK logs

No response

Expected behavior

No response

Affected SDK versions

2.4.0, 2.5.0

Latest working SDK version

-

Did you confirm if the latest SDK version fixes the bug?

Yes

Flutter Version

3.19.6

Setup Type

Flutter Application

Device Information

seems to be device-agnostic. We've seen this happening on Android & iOS devices alike

Other relevant information

No response

fuzzybinary commented 2 weeks ago

Hi @mbtodorov,

Do the events (view events, action events, etc) after your call to setUserInfo have the appropriate user information, but this information isn't being applied to the entire session?

I do think this is intended behavior, but I will look into whether there's a workaround or query you can do that will get you the information you need.

mbtodorov commented 2 weeks ago

Do the events (view events, action events, etc) after your call to setUserInfo have the appropriate user information

Thats a good question, forgot to post a screenshot of that. The events themselves also dont have any user info attached.

I do think this is intended behavior, but I will look into whether there's a workaround or query you can do that will get you the information you need.

This will be much appreciated, thank you. I tried finding a way to force terminate the session and start a new one but couldnt find any method in the SDK.

fuzzybinary commented 2 weeks ago

Thats a good question, forgot to post a screenshot of that. The events themselves also dont have any user info attached.

I don't think that is correct. I will look into it.

I tried finding a way to force terminate the session and start a new one but couldnt find any method in the SDK.

There is a method you can use to stop a Datadog Session on the rum member:

DatadogSdk.instance.rum?.stopSession();

This will stop the current session. The next user action (view change or call to addAction) will start a new session.

mbtodorov commented 2 weeks ago

@fuzzybinary thanks for the quick workaround. I am not sure how i missed that method.. I have just tested it and it works as a workaround - we can split the session in two, one part anonymous and one part authenticated. I am happy to close this issue with this.

However, let me know if you would perhaps like to keep it open, while you verify that not having the attributes attached even in the individual events is expected behaviour

I don't think that is correct. I will look into it.

fuzzybinary commented 2 weeks ago

Let's keep it open, as we agree the User information should be applied to all events after the call to setUserInfo even if they aren't applied to the session itself.

Can you contact Datadog support to open an issue and point them to this Github issue? That will let us get a bit more information.

Thanks!