How to implement EOS without the need of Epic account for players

I want to release my game on Epic as well as Steam at launch, and so I want to integrate EOS for the multiplayer connectivity part.

Until now I only used Advanced Steam Sessions, which worked fine most of the time, but that won’t work cross-platform / multiple stores.

Also because I want to launch the game on Steam as well, I do not want the player to have to login with an Epic account for EOS, I want to make it so that it works similar to how EOSIntegrationKit does it, where it gives you the option to login with a device id, which is done in the background, no input from player. I would have simply used that plugin, but it doesn’t get updated that often.

I found this tutorial, but unfortunately it requires an Epic account, and from what I read from other sources, for the device id part you will have to use EOS SDK, the plugins that come with the engine do not have this function yet.

With all this in mind, does anyone have some good tutorials to follow? I do not need any other features from EOS services other then: hosting, finding and joining a lobby. I do not need leaderboard, friends, invites…, just those 3 functions with VOIP.

Now I know that all this will not be available straight in blueprints, and I will have to write some C++ functions, but that is fine, as my game is already hybrid to fix some broken or missing features in the engine for blueprints.

So I looked at the plugins and the code the Engine comes with, and it seems that it does contain EOS_ECT_DEVICEID_ACCESS_TOKEN, which makes me think that you do not need the SDK even for using device id login method (anonymous login for players), but you have to write C++ code for the login part. The EOS SDK seems to be implemented completely in the engine at least in version 5.7.3.

And so maybe those tutorials were basing the information on older versions.

Can someone confirm this? I will try to find this on myself and make a C++ blueprint function library for Blueprint access.

I don’t recommend using DeviceId, except for specific use cases. This is not one of them.

I’m assuming you are using the OnlineSubsystemEOS? If you are, for your use case, you’ll need 2 DefaultEngine.ini configurations. 1 for EGS, and 1 for Steam. In the EGS one, set bUseEAS to true. In the Steam one set bUseEAS to false. In your C++ code, call Identity→AutoLogin(). The plugin will handle logging in using Epic for the EGS build, and will use the player’s Steam account for the Steam build.

If you’ve never set up custom configurations (multiple .ini files for the same platform), have a look at Lyra. There is a custom config for EOS and one for SteamEOS. In the SteamEOS config you can set bUseEAS to false to test the Steam flow. You’ll need to launch your game with -customconfig=“SteamEOS”

Hope this helps!

Why do you think that is not the right choice for this?

For my use case I want to use EOS only for like I said, hosting, finding and joining a lobby/session, and be store independent, rely on Epic backend only for the multiplayer connections, but not on Epic Store, Steam Store, any other store. I do not need any identifiers for the player from any store, as all player data is handled by my own server. Even player invites are also done via my own server and not Epic or Steam friends list.

When I am saying “my own server”, I do not mean dedicated gameplay server, only player data (username, email, nickname…).

Right now I want to give EOSIntegrationKit another chance, because I see they started to update it again, but even in this case I like the option for device id for the reason mentioned above.

//Edit: Fixed can be ignored
I managed to make some parts of it work. The login works, but I have a problem with Open Level ?listen. If I do not use it, I can host a session fine, I can find the session, but of course I have the problem that the player doesn’t really join it. But if I use ?listen then from GameInstance Network Error is triggered with Net Driver Listen Failure.

I remember at one point I had this problem with Advanced Steam Session as well, then Open Level ?listen was called, then the new map was loaded only for a split second and then returned to default map, but I honestly can not remember how I fixed it.

//Edit2: Fixed can be ignored
Here are some parts of the log for the error:

[2026.02.21-20.03.44:411][267]LogSocketSubsystemEOS: Error: No local user to send p2p packets with
[2026.02.21-20.03.44:411][267]LogTemp: Warning: Could not bind local address
[2026.02.21-20.03.44:411][267]LogNet: Error: UEngine::BroadcastNetworkFailure: FailureType = NetDriverListenFailure, ErrorString = Could not bind local address, Driver = Name:GameNetDriver Def:GameNetDriver NetDriverEIK_8
[2026.02.21-20.03.44:411][267]LogNet: Warning: Network Failure: GameNetDriver[NetDriverListenFailure]: Could not bind local address
[2026.02.21-20.03.44:411][267]LogNet: NetworkFailure: NetDriverListenFailure, Error: 'Could not bind local address'
[2026.02.21-20.03.44:411][267]LogBlueprintUserMessages: [CustomGameInstance_C_2] Server: 22:03:44:411   Network error: Net Driver Listen Failure true
[2026.02.21-20.03.44:411][267]LogWorld: Failed to listen: Could not bind local address
[2026.02.21-20.03.44:411][267]LogNet: DestroyNamedNetDriver: Name:GameNetDriver Def:GameNetDriver NetDriverEIK_8

//Edit3:
The above problem seems to have been simply because I was trying in PIE not standalone. With Advanced Steam Session it was working in PIE, but EOS seems to work in standalone only.

Now I have a different problem, when I am trying to join, I get “Pending Connection Failure”, but from what I read it might be because of Device ID, both standalone get the same ID, and EOS doesn’t like that. I will try to package the game and test it on 2 different devices.