Online Subsystem Blueprintable - Setup Guide
This guide walks you through setting up Online Subsystem Blueprintable for your project, including platform-specific configuration for Steam and Epic Online Services.
Basic Installation
-
Download the Plugin
Get the latest version from your Dashboard
-
Install to Project
Extract to
YourProject/Plugins/OnlineSubsystemBlueprintable/ -
Enable Required Plugins
In Edit → Plugins, enable:
- Online Subsystem Blueprintable
- Online Subsystem (if not already enabled)
- Your target platform plugin (e.g., Online Subsystem Steam)
-
Activate License
Go to Edit → Project Settings → Plugins → gameDNA Online Subsystem Blueprintable Enter your license key and click Activate
-
Restart Editor
Restart Unreal Editor to ensure all modules load correctly
Project Configuration
DefaultEngine.ini
Add platform configuration to Config/DefaultEngine.ini:
[OnlineSubsystem]DefaultPlatformService=Steam
[OnlineSubsystemSteam]bEnabled=trueSteamDevAppId=480; Replace 480 with your actual Steam App ID for production
[/Script/OnlineSubsystemSteam.SteamNetDriver]NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"[OnlineSubsystem]DefaultPlatformService=EOS
[OnlineSubsystemEOS]bEnabled=true
[/Script/OnlineSubsystemEOS.EOSSettings]ProductId=YOUR_PRODUCT_IDSandboxId=YOUR_SANDBOX_IDDeploymentId=YOUR_DEPLOYMENT_IDClientId=YOUR_CLIENT_IDClientSecret=YOUR_CLIENT_SECRET[OnlineSubsystem]; Don't set default - we'll choose at runtime; DefaultPlatformService=
[OnlineSubsystemSteam]bEnabled=trueSteamDevAppId=480
[OnlineSubsystemEOS]bEnabled=true
; Plugin-specific settings[OnlineSubsystemBlueprintable]bAllowRuntimeSwitch=trueDefaultSubsystem=SteamFallbackSubsystem=EOSSteam Setup
Prerequisites
- Steam account with Steamworks access
- Steam App ID (use 480 for testing)
- Steamworks SDK (included with UE Steam plugin)
Step-by-Step Setup
-
Get Steam App ID
- For testing: Use
480(Spacewar test app) - For production: Create app at partner.steamgames.com
- For testing: Use
-
Configure Steam Settings
In
Config/DefaultEngine.ini:[OnlineSubsystemSteam]bEnabled=trueSteamDevAppId=480bRelaunchInSteam=falseSteamAppId=480GameServerQueryPort=27015bVACEnabled=trueGameVersion=1.0.0.0 -
Create steam_appid.txt
Create
steam_appid.txtin your project root containing just your App ID:480 -
Configure Achievements (Optional)
In Steamworks dashboard, define your achievements. The plugin will query them at runtime.
-
Test Connection
Create a test Blueprint:
Event BeginPlay→ Initialize Online Subsystem (Platform: "Steam")→ Print: Is InitializedRun with Steam client open. Should print “true”.
Steam-Specific Nodes
| Node | Description |
|---|---|
Get Steam ID | Returns the local player’s Steam ID |
Get Steam Persona Name | Returns the Steam display name |
Open Steam Overlay | Opens Steam overlay to a specific page |
Get Steam Avatar | Returns player’s Steam avatar as texture |
Is Steam Running | Checks if Steam client is active |
Epic Online Services Setup
Prerequisites
- Epic Games account
- EOS Developer Portal access
- Product, Sandbox, and Deployment configured
Step-by-Step Setup
-
Create EOS Product
Visit dev.epicgames.com/portal
- Create new product
- Note your Product ID, Sandbox ID, Deployment ID
- Create a Client under Product Settings
-
Configure Credentials
In
Config/DefaultEngine.ini:[OnlineSubsystemEOS]bEnabled=true[/Script/OnlineSubsystemEOS.EOSSettings]ProductId=prod_xxxxxxxxxxxxxxxxSandboxId=sandbox_xxxxxxxxxxxxxxxxDeploymentId=deploy_xxxxxxxxxxxxxxxxClientId=xyza7891234567890abcdefClientSecret=your-client-secret-here; Auth scopesScopeFlags=BasicProfile,FriendsList,Presence -
Configure Login Methods
In EOS Developer Portal, enable desired login methods:
- Epic Account (Epic Games Launcher users)
- Device ID (anonymous, great for initial testing)
- External (Steam, PlayStation, etc.)
-
Test Connection
Create a test Blueprint:
Event BeginPlay→ Initialize Online Subsystem (Platform: "EOS")→ Login with Device ID→ On Success: Print "EOS Connected!"
EOS-Specific Nodes
| Node | Description |
|---|---|
Login with Epic Account | OAuth login via Epic |
Login with Device ID | Anonymous device-based login |
Login with External | Login using Steam/console credentials |
Get EOS Product User ID | Returns the PUID |
Get EOS Epic Account ID | Returns Epic account ID if linked |
Runtime Platform Switching
One powerful feature is switching platforms at runtime:
// Check available platformsGet Available Online Subsystems→ For Each: Print Platform Name
// Switch to a different platformSwitch Online Subsystem (New Platform: "EOS")→ On Success: → Login with appropriate method→ On Failure: → Print Error MessageBlueprint Setup
Creating a Login Manager
-
Create Blueprint
Content Browser → Blueprint Class → Actor → Name:
BP_OnlineManager -
Add Variables
IsInitialized(Boolean)IsLoggedIn(Boolean)CurrentUserId(String)CurrentDisplayName(String)
-
Initialize on Begin Play
Event BeginPlay→ Initialize Online Subsystem→ Bind: On Initialize CompleteOn Initialize Complete (Success)→ Set IsInitialized = Success→ Branch: Success?→ True: Call Custom Event "DoLogin"→ False: Print "Failed to initialize: " + Error -
Create Login Function
Custom Event: DoLogin→ Login With Platform Credentials→ Bind: On Login CompleteOn Login Complete (Success, UserId, Error)→ Set IsLoggedIn = Success→ Branch: Success?→ True:→ Set CurrentUserId = UserId→ Get Player Display Name → Set CurrentDisplayName→ Print "Welcome, " + CurrentDisplayName→ False:→ Print "Login failed: " + Error -
Create Public Interface
Function: GetFriendsList→ Branch: IsLoggedIn?→ True: Query Friends List → Return Result→ False: Return Empty ArrayFunction: UnlockAchievement (Input: AchievementId)→ Branch: IsLoggedIn?→ True: Unlock Achievement (AchievementId)→ False: Print "Must be logged in"
Best Practices
-
Single Manager Instance
Use a Game Instance subsystem or singleton pattern to ensure only one Online Manager exists.
-
Handle Disconnections
Bind to
OnConnectionStatusChangedto handle network issues:On Connection Status Changed (NewStatus)→ Branch: NewStatus == "Connected"?→ False: Show "Connection Lost" UI -
Cache Data
Friends lists and achievements don’t change frequently. Cache results and refresh periodically:
// Refresh friends every 60 secondsEvent BeginPlay→ Set Timer by Function Name ("RefreshFriends", 60.0, true) -
Graceful Degradation
Always have fallback behavior if online features fail:
Function: SaveGame→ Try Cloud Save→ On Failure: Fall back to Local Save
Troubleshooting
Common Issues
| Issue | Solution |
|---|---|
| ”Steam not running” | Ensure Steam client is open |
| ”Invalid App ID” | Check steam_appid.txt exists and has correct ID |
| EOS login fails | Verify all credentials in DefaultEngine.ini |
| Achievements not appearing | Check they’re published in platform dashboard |
| Friends list empty | Ensure proper scopes/permissions are configured |
Debug Logging
Enable verbose logging:
[Core.Log]LogOnline=VerboseLogOnlineSubsystemBlueprintable=VerboseLogOnlineSession=VerboseCheck logs in Window → Developer Tools → Output Log.
Next Steps
- API Reference - Full node documentation
- FAQ - Common questions
- Discord - Community support