We are developing a title that using OSSv2 and Lobbies with 2 builds, one steam, and one EOS build.
We have a steam build that uses OnlineServicesEOSGS that allows the user to use their steam login as an external auth to EAS without requiring a linked EAS account.
We also have an EOS build which uses OnlineServicesEOS (not GS) which uses an EOS login.
Both builds can host a listen server that users on the same build can can connect to, but the opposite build cannot connect to it.
I looked at the connection process and when the steam client logs in to the EOS host, the EOS host tries to creates the unique id from the login data using [FOnlineAccountIdRegistryEOS::FromReplicationData] and then attempts to call this function [FOnlineAccountIdRegistryEOS::FindOrAddAccountId]
FAccountId FOnlineAccountIdRegistryEOS::FindOrAddAccountId(const EOS_EpicAccountId InEpicAccountId, const EOS_ProductUserId InProductUserId)
{
FAccountId Result;
const bool bInEpicAccountIdValid = EOS_EpicAccountId_IsValid(InEpicAccountId) == EOS_TRUE;
const bool bInProductUserIdValid = EOS_ProductUserId_IsValid(InProductUserId) == EOS_TRUE;
if (ensure(bInEpicAccountIdValid || bInProductUserIdValid))
And that “ensure(bInEpicAccountIdValid || bInProductUserIdValid)” gets triggerred because it looks like its expecting an Epic unique Id (instead of a Steam id).
Honestly, it looks like an OnlineServicesEOS and OnlineServicesEOSGS build are not crossplay compatible with each other since their FromReplicationData parse the buffers differently.
My intuition is that both builds need to be using the same OnlineServices, which seems to imply that it must be OnlineServicesEOSGS since OnlineServicesEOSGS can support both id types (vs OnlineServicesEOS which doesn’t appear to support other platform ids).
If I try to just use OnlineServicesEOSGS without providing a Platform service, things like the PresenceInterface doesn’t work since it doesn’t get added by OnlineServicesEOSGS the same way that it does with OnlineServicesEOS. What I came up with using the OnlineSubsystemEOS and the OSSAdapter, with the windowsengine.ini having these settings:
[OnlineServices.EOS.Auth]
EASAuthEnabled=true
[OnlineServices]
DefaultServices=Epic
PlatformServices=GameDefined_0
[OnlineSubsystemEOS]
bEnabled=true
[/Script/OnlineSubsystemEOS.EOSSettings]
bUseEAS=True
[OnlineServices.OSSAdapter]
+Services=(Service="GameDefined_0",ConfigName="GameDefined_0",OnlineSubsystem="EOS",Priority=1000)
This way, it tries to use the OnlineSubsystemEOS as its PlatformService, but it doesnt seem like an ideal solution. I believe this other [Content removed] encountered the same issue which is why they were similarly setting up EOS Service with EOS subsystem, but they appear further in development and are encountering double login issues in a production environment. I bookmarked that thread since maybe whatever solution they do would work for us. Are we going about this all wrong? Is there a better way to have the two crossplay builds connect to each other?