UE 5.5 OSS Steam: FindSessions returns 0 results even when testing on different PCs and accounts (AppID 480)

1 day ago 1
ARTICLE AD BOX

Environment:

Engine: Unreal Engine 5.5.4 (Release)

Online Subsystem: Steam (AppID 480 - Spacewar)

Testing Methods:
1. Multiple Standalone instances from one Editor (Host on Steam, Client often falls back to NULL due to race condition).
2. Two separate PCs and Steam Accounts (Both successfully initialized Steam, but still 0 results).

Plugin: Advanced Steam Sessions in Engine/Plugins/.

The Problem: I am unable to find a hosted session via FindSessions function. While local testing (2 instances) sometimes fails due to Steam initialization conflicts. 1 time while local testing i was able to find my own lobby, but since that i wasn't able to replicate that.
While testing with a friend on a completely different network also yields 0 results, even though the Steam Overlay is active on both sides and logs confirm Steam is initialized.

Technical Observations:

Logs (Local Test): When running 2 instances, one log shows OSS: Unable to create OnlineSubsystem instance Steam, falling back to NULL.

Logs (Friend Test): Both logs show STEAM: [AppId: 480] Client API initialized 1. However, the search still returns Found 0 lobbies.

AppID 480 Noise: I am aware that AppID 480 is crowded, so I've implemented a unique SEARCH_TAG filter to isolate my sessions.

Logs every time show this message, however ServerBuildUniqueId and BuildId should be the same:

\[2026.01.26-14.31.43:944\]\[ 32\]LogOnlineSession: Warning: STEAM: Server response IP:123.243.252.232 \[2026.01.26-14.31.43:944\]\[ 32\]LogOnlineSession: Warning: STEAM: Removed incompatible build: ServerBuildUniqueId = 0x00000000, GetBuildUniqueId() = 0x023ecee6

What I have tried:

Restarted Steam: Both players fully restarted Steam.

Sequential Launch: Ensured the Host session is fully created before the Client starts searching.

Download Region: Verified both Steam clients are set to the same download region (UK/Belgium).

Build ID Sync: Checked the logs on both sides buildID's and ServerUniqueBuildId all are the same.

Host Code (CreateSession func):

void UPSGameInstance::CreateSession(int32 NumPublicConnections, bool bIsLAN, const FString& SessionName) { LastCreatedSessionName = SessionName; if (!SessionInterface.IsValid()) { UE_LOG(LogTemp, Error, TEXT("CreateSession: Invalid session interface.")); if (OnSessionCreated.IsBound()) OnSessionCreated.Broadcast(false, SessionName); return; } FNamedOnlineSession* ExistingSession = SessionInterface->GetNamedSession(NAME_GameSession); if (ExistingSession) { SessionInterface->DestroySession(NAME_GameSession); UE_LOG(LogTemp, Error, TEXT("CreateSession: Destroy Existing Session.")); } FOnlineSessionSettings SessionSettings; SessionSettings.bIsLANMatch = bIsLAN; SessionSettings.NumPublicConnections = NumPublicConnections; SessionSettings.bShouldAdvertise = true; SessionSettings.bUsesPresence = true; SessionSettings.bAllowJoinInProgress = true; SessionSettings.bUseLobbiesIfAvailable = true; SessionSettings.bAllowJoinViaPresence = true; SessionSettings.Set(FName("SESSION_NAME"), SessionName, EOnlineDataAdvertisementType::ViaOnlineServiceAndPing); SessionSettings.Set(FName("SEARCH_TAG"), FString("POOL_STORY_2026"), EOnlineDataAdvertisementType::ViaOnlineService); bIsUsingLAN = bIsLAN; uint32 BuildID = GetBuildUniqueId(); SessionSettings.BuildUniqueId = BuildID; UE_LOG(LogTemp, Warning, TEXT("[SESSION_DEBUG] CreateSession: Setting ServerUniqueBuildID = 0x%X (%u)"), BuildID, BuildID); SessionInterface->AddOnCreateSessionCompleteDelegate_Handle( FOnCreateSessionCompleteDelegate::CreateUObject(this, &UPSGameInstance::OnCreateSessionComplete)); if (!SessionInterface.IsValid()) return; SessionInterface->CreateSession(0, NAME_GameSession, SessionSettings); }

Client Code (FindSessions func):

void UPSGameInstance::FindSessions(bool bIsLAN, int32 MaxResults, const FString& SearchKeyword) { if (!SessionInterface.IsValid()) { UE_LOG(LogTemp, Error, TEXT("FindSessions: Invalid session interface.")); OnSessionsFound.Broadcast({}); return; } SessionSearch = MakeShareable(new FOnlineSessionSearch()); SessionSearch->bIsLanQuery = bIsLAN; SessionSearch->MaxSearchResults = MaxResults; SessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals); SessionSearch->QuerySettings.Set(FName("SEARCH_TAG"), FString("POOL_STORY_2026"), EOnlineComparisonOp::Equals); if (!SearchKeyword.IsEmpty()) { SessionSearch->QuerySettings.Set(FName("SESSION_NAME"), SearchKeyword, EOnlineComparisonOp::Equals); } SessionInterface->AddOnFindSessionsCompleteDelegate_Handle( FOnFindSessionsCompleteDelegate::CreateUObject(this, &UPSGameInstance::OnFindSessionsComplete)); if (!SessionInterface.IsValid()) return; SessionInterface->FindSessions(0, SessionSearch.ToSharedRef()); }

Question: Is there a known issue in Unreal Engine 5.5 where specific Steam settings prevent sessions from being visible globally on AppID 480? Are there any additional QuerySettings or DefaultEngine.ini flags required for UE 5.5 to correctly broadcast lobbies through the Steam OSS? Where should i look. I've been stuck with this for a while.

Read Entire Article