Platform Services: Cloud Save, User, Voice & External UI

UCrimsonOnlineCloudSaveService

Wraps IOnlineUserCloud. Saves and loads arbitrary binary or string blobs keyed by filename per player. Must be enabled in Project Settings (bEnableCloudSave).

FunctionDescription
WriteFile(LocalPlayerIndex, FileName, Data, Delegate)Uploads a byte array to the cloud under the given file name
ReadFile(LocalPlayerIndex, FileName, Delegate)Downloads a file; result is TArray<uint8>
DeleteFile(LocalPlayerIndex, FileName, Delegate)Permanently deletes the cloud file
EnumerateFiles(LocalPlayerIndex, Delegate)Lists all cloud files for the player
GetCachedFileHeaders(LocalPlayerIndex)Returns TArray<FCrimsonCloudFileHeader> (Name + FileSize)
OnWriteFileCompleteDelegate: bool success + FileName
OnReadFileCompleteDelegate: bool success + FileName + Data
cpp
TArray<uint8> SaveBytes = SerializeSaveData();
GetCloudSaveService()->WriteFile(0, TEXT("Profile.sav"), SaveBytes,
FCrimsonCloudWriteCompleteDelegate::CreateLambda([](bool bOk, const FString& Name)
{
if (!bOk) CRIMSON_LOG_WARN(LogCrimsonOnlineSubsystem, TEXT("Cloud save failed"));
}));
Pair with CrimsonSaveSystem
Use UCrimsonOnlineCloudSaveService to upload the binary blob produced by UCrimsonSaveGameSubsystem::GetSaveBytes(). This keeps cloud save decoupled from any specific save format.

UCrimsonOnlineUserService

Wraps IOnlineUser. Resolves display names and metadata for arbitrary remote player IDs — useful for showing names in scoreboards without requiring a friend-list read first.

FunctionDescription
QueryUserInfo(LocalPlayerIndex, UserIds, Delegate)Fetches display names + metadata for a list of player IDs
GetCachedUserInfo(LocalPlayerIndex, UserId)Returns FCrimsonOnlineUserInfo (UniqueId, DisplayName, AvatarURL)

UCrimsonOnlineVoiceService

Wraps IOnlineVoice. Manages push-to-talk registration and per-player mute state.

FunctionDescription
RegisterLocalTalker(LocalPlayerIndex)Registers the local player as a voice talker
UnregisterLocalTalker(LocalPlayerIndex)Unregisters; call on disconnect or logout
RegisterRemoteTalker(UniqueId)Registers a remote player to receive their voice
UnregisterRemoteTalker(UniqueId)Unregisters a remote talker
MuteRemoteTalker(LocalPlayerIndex, UniqueId, bIsSystemWide)Mutes a remote player
UnmuteRemoteTalker(LocalPlayerIndex, UniqueId, bIsSystemWide)Unmutes a remote player
IsLocalPlayerTalking(LocalPlayerIndex)Returns bool — currently transmitting audio
IsRemotePlayerTalking(UniqueId)Returns bool — currently receiving audio from this player
OnPlayerTalkingStateChangedDelegate: UniqueId + bool bIsTalking
cpp
// PTT pattern — bind to an Enhanced Input action
void UMyVoiceComponent::OnPTTPressed()
{
GetVoiceService()->RegisterLocalTalker(0);
}
void UMyVoiceComponent::OnPTTReleased()
{
GetVoiceService()->UnregisterLocalTalker(0);
}

UCrimsonOnlineExternalUIService

Wraps IOnlineExternalUI. Opens platform-native overlays for profile view, friend invite, and store pages.

FunctionDescription
ShowProfileUI(LocalPlayerIndex, TargetId, Delegate)Opens the platform profile overlay for the target player
ShowFriendsUI(LocalPlayerIndex)Opens the platform friend list overlay
ShowInviteUI(LocalPlayerIndex, SessionName)Opens the platform session invite overlay
ShowStoreUI(LocalPlayerIndex, ProductId, Delegate)Opens the platform store page for the given product
ShowLoginUI(LocalPlayerIndex, bShowOnlineOnly, Delegate)Opens the platform account login overlay
OnExternalUIClosedDelegate: bool bWasSuccessful