Frequently Asked Questions
Common questions and solutions for platform setup, authentication, errors, and integration with the Unity SDK.Platform & Testing
Can I test using Unity Editor for mobile?
Can I test using Unity Editor for mobile?
| Testing Stage | Environment | Purpose |
|---|---|---|
| Development | Unity Editor | Quick iteration on logic |
| Integration | Android/iOS Emulator | Test mobile WebView behavior |
| Final QA | Physical Device | Test performance & real hardware |
'WebView is not supported on this platform'
'WebView is not supported on this platform'
Do you support IL2CPP for Windows?
Do you support IL2CPP for Windows?
What regions are supported?
What regions are supported?
Authentication
Can I use a WebView instead of the system browser for login?
Can I use a WebView instead of the system browser for login?
Why is the in-app browser used for Passport login on mobile and not a webview?
Why is the in-app browser used for Passport login on mobile and not a webview?
| Feature | In-App Browser | WebView |
|---|---|---|
| Process isolation | ✅ Separate process | ❌ Same process as app |
| App can inject code | ❌ No | ✅ Yes (security risk) |
| App can intercept requests | ❌ No | ✅ Yes (security risk) |
| Designed for SSO | ✅ Yes | ❌ No |
- Android: Chrome Custom Tabs
- iOS/macOS: ASWebAuthenticationSession
iOS shows 'Wants to Use immutable.com to Sign In' alert
iOS shows 'Wants to Use immutable.com to Sign In' alert
ASWebAuthenticationSession, which shows an alert. This alert cannot be removed or modified as the operating system triggers it.Learn more about ASWebAuthenticationSessionError 403: disallowed_useragent when logging in with Google
Error 403: disallowed_useragent when logging in with Google
Why custom URL schemes instead of Universal Links?
Why custom URL schemes instead of Universal Links?
Errors & Troubleshooting
TimeoutException: Exceed Timeout:00:01:00
TimeoutException: Exceed Timeout:00:01:00
TimeoutException, it indicates that the function you called took more than one minute to return a response. Although this is the default timeout value, the timeout can be customized using the SetCallTimeout function.Stuck at 'Waiting for ready signal' after init
Stuck at 'Waiting for ready signal' after init
index.html file required to run the SDK.This error could be because the files weren’t copied correctly to the build. Check if you got the message “Successfully copied Passport files” in the console output during build.Another reason for this error could be that the path to the index.html file is unexpected. We try to cover all the possible cases in our SDK, but if you suspect this is the problem, please create a GitHub issue.VoltstroStudios.UnityWebBrowser.Shared namespace error
VoltstroStudios.UnityWebBrowser.Shared namespace error
Android NullPointerException on Unity 6
Android NullPointerException on Unity 6
Activity, not GameActivity.Try the following:- Set your Application Entry Point to
Activityin Project Settings → Player → Android → Other Settings → Configuration → Application Entry Point - Open your
AndroidManifest.xmlfile and remove theUnityPlayerGameActivityactivity block, keeping only theUnityPlayerActivityblock
Login and ConnectImx don't work with Android minify enabled
Login and ConnectImx don't work with Android minify enabled
'The engine did not get ready within engine startup timeout!' on Windows
'The engine did not get ready within engine startup timeout!' on Windows
- Before starting your game, check the Task Manager for Chrome Embedded Framework (CEF) and kill it if it’s running. Our code handles this, but you may need to do it manually.
- Restart your computer.
- Increase the engine start-up timeout in the
Passport.Initfunction here.
'engine process could not be found' when using Unity Web Browser
'engine process could not be found' when using Unity Web Browser
dev.voltstro.unitywebbrowserdev.voltstro.unitywebbrowser.engine.cefdev.voltstro.unitywebbrowser.engine.cef.win.x64(for 64-bit Windows builds)
IWindowsWebBrowserClient implementation you provide.Getting Started & Integration
Is there a tutorial on using the Unity SDK?
Is there a tutorial on using the Unity SDK?
- Unity Sample Game - Full working example
- Unity SDK Reference - Complete API documentation
Can I use the Unity SDK for crafting?
Can I use the Unity SDK for crafting?
I use a custom engine. How can I integrate with Immutable?
I use a custom engine. How can I integrate with Immutable?
- Communication between the Game SDK and the TypeScript SDK packages
- Presentation of the PKCE flow on Android, iOS, and macOS
| Component | Description |
|---|---|
| Index file | The index file serves as a bridge between the Game SDK and the TypeScript SDK. The game-bridge package enables the Game SDK to interact with the necessary TypeScript SDK packages (e.g. passport, config, x-provider) using string-based communication. For Unity, the required TypeScript SDK packages and the game-bridge package are bundled into an HTML file. This index file is then loaded into an invisible WebView within the Game SDK. |
| Invisible WebView | The invisible WebView loads the index file in the Game SDK. The implementation varies across platforms: Android uses Android native WebView; iOS and macOS use Apple native WKWebView; Windows uses Unity Web Browser (UWB) when installed, or any custom Windows WebView that implements IWindowsWebBrowserClient. |
- Android: Chrome Custom Tabs
- iOS and macOS:
ASWebAuthenticationSession
- Reuse the Index File: You can reuse our index file, but you may need to rewrite how it communicates with the WebView. This involves modifying the
callbackToGame()function in the TypeScript SDK’sgame-bridge/index.tsfile. After making your changes, you must bundle and generate the index file (refer to our README). - Reuse WebView Implementation: You can reuse most of our WebView implementations as they are written in the platform’s native languages. However, you must adapt the communication between your custom engine and the WebView.
- Reuse PKCE Implementation: Similar to the WebView implementations, most PKCE implementations can be reused as they are written in the platform’s native languages. However, you must adapt the communication between your custom engine and the native code.