The check in Prelogin was meant to keep compatible “Default” OnlineSubsystems together and alert if they are incompatible for reasons alluded to here, including registration and just basic FUniqueNetId incompatibility. The engine tries to do various things for you AGameSession::RegisterPlayer for example and things will just break if you pass incompatible FUniqueNetIds around.
That being said PC obviously doesn’t have any console interface because there is simply no API from them to do so. Some people have been using the OnlineSubsystemNULL as the default subsystem for both clients/servers but it wasn’t really meant to be a production system as it doesn’t support many features you need.
Depending on what you are doing, you could try to start with this (DefaultPlatformService=NULL) so both servers/clients have a common OSS. Depending on the feature set you may need to extend NULL. We pass the PlatformUniqueNetId to the AGameMode::Login call by extending ULocalPlayer::GetGameLoginOptions (?PlatformId=someConsoleId/etc) and then the dedicated server holds on to that via CreateForeignUniqueNetId so it can be replicated/compared/etc even though it can’t be directly useful off the native platform. Replicating to other players is super important for parties and other reasons.
Beacons don’t care about most of this, other than say passing around an FUniqueNetId as part of the handshaking. Console session management has to occur on the clients since a Linux/PC server doesn’t understand console APIs.
You can access any OnlineSubsystems directly from the code via IOnlineSubsystem::Get(World, NAMEOFSUBSYSTEM). For Fortnite we wrap this call into GetPlatformOnlineSubsystem() which returns Xbox/PS4/Switch/etc based on compiled platform. The common interface makes it so it doesn’t really matter what platform we are talking to for registration/voice/cloud save/etc.
The overall point isn’t about converting from UniqueId to another, but maintaining parallel OnlineSubsystems to get the data between clients through agnostic replication on the server. There is no universal OnlineSubsystem yet that can talk across platforms. The one we have in Fortnite is what we’re trying to expose via the Epic Online Services SDK which is underway right now.
You can see its beginnings at dev.epicgames.com or the various blogs that talk about our services roadmap. To be clear this SDK does not require our store, but our current implementations aren’t ready for public consumption yet.