iOS
URL Scheme Configuration
Add your custom URL scheme in Project Settings:
- Go to Project Settings → Platforms → iOS
- Under Extra PList Data, add:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>mygame</string>
</array>
</dict>
</array>
Deep Link Handling
The SDK handles deep links automatically. Ensure your redirect URIs match:
[/Script/ImmutableSDK.ImmutableSettings]
RedirectUri=mygame://callback
LogoutRedirectUri=mygame://logout
Build Settings
- Set Minimum iOS Version to 13.0 or higher
- Configure code signing in Project Settings → iOS
- Enable Generate dSYM bundle for crash reporting
iOS-Specific Notes
- Login uses
ASWebAuthenticationSession, which shows a system alert
- Deep links use URL schemes (required for PKCE security)
- Test on physical devices when possible
Android
Manifest Configuration
The SDK automatically merges required manifest entries. If you need custom configuration:
- Go to Project Settings → Android
- Enable Use Custom Manifest
- Add intent filters for deep linking:
<activity android:name="com.epicgames.unreal.GameActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="mygame" android:host="callback" />
</intent-filter>
</activity>
Build Settings
- Set Minimum SDK Version to 24
- Set Target SDK Version to 33 or higher
- Enable Support arm64 for modern devices
Android-Specific Notes
- Login uses Chrome Custom Tabs
- Ensure Chrome is available on test devices
- Test on physical devices for accurate authentication flow
Windows
Build Configuration
- Set target platform to Windows
- Configure packaging settings in Project Settings → Windows
- The SDK uses the embedded Chromium WebView
Desktop WebView
The SDK initializes a hidden WebView for authentication. This is handled automatically.
macOS
URL Scheme Configuration
Add to Info.plist via Project Settings:
- Go to Project Settings → Platforms → Mac
- Under Extra PList Data, add URL scheme configuration (same as iOS)
Build Settings
- Set Minimum macOS Version to 10.15
- Configure code signing for distribution
Handle platform differences in C++:
void AMyController::Login()
{
UImmutableSubsystem* Immutable = GetGameInstance()->GetSubsystem<UImmutableSubsystem>();
#if PLATFORM_IOS
// iOS-specific handling if needed
#elif PLATFORM_ANDROID
// Android-specific handling if needed
#endif
Immutable->Login(
FImmutableLoginComplete::CreateUObject(this, &AMyController::OnLoginComplete),
FImmutableLoginFailed::CreateUObject(this, &AMyController::OnLoginFailed)
);
}
Use the Get Platform Name node to branch based on platform:
Get Platform Name
├── Windows → Windows-specific logic
├── Mac → macOS-specific logic
├── IOS → iOS-specific logic
└── Android → Android-specific logic
Testing
| Platform | Recommended Method |
|---|
| iOS | Physical device or Simulator |
| Android | Physical device or Emulator |
| Windows | Editor or packaged build |
| macOS | Editor or packaged build |
Always test authentication flows on target platforms. Editor behavior may differ from packaged builds.
Next Steps