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).
| Function | Description |
|---|---|
| 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) |
| OnWriteFileComplete | Delegate: bool success + FileName |
| OnReadFileComplete | Delegate: bool success + FileName + Data |
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.
| Function | Description |
|---|---|
| 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.
| Function | Description |
|---|---|
| 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 |
| OnPlayerTalkingStateChanged | Delegate: UniqueId + bool bIsTalking |
// PTT pattern — bind to an Enhanced Input actionvoid 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.
| Function | Description |
|---|---|
| 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 |
| OnExternalUIClosed | Delegate: bool bWasSuccessful |